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
fc65d5be
Commit
fc65d5be
authored
Aug 07, 2023
by
lvzhuangzhuang
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
# Conflicts: # ruoyi-ui/src/views/system/supplies/index.vue
parents
c37d519c
5c5f50e2
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
1449 additions
and
470 deletions
+1449
-470
ruoyi-ui/src/views/system/supplies/index.vue
ruoyi-ui/src/views/system/supplies/index.vue
+918
-443
ruoyi-ui/src/views/system/supplies/indexupload.vue
ruoyi-ui/src/views/system/supplies/indexupload.vue
+168
-27
ruoyi-ui/src/views/system/supplies/upload.vue
ruoyi-ui/src/views/system/supplies/upload.vue
+363
-0
No files found.
ruoyi-ui/src/views/system/supplies/index.vue
View file @
fc65d5be
<
template
>
<
template
>
<div
class=
"app-container"
>
<div
class=
"app-container"
>
<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"
@
change=
"handleOptionChange"
filterable
placeholder=
"请选择您要查看的模板"
>
<el-select
v-model=
"selectedOption"
ref=
"mySelect"
size=
"mini"
@
change=
"handleOptionChange"
filterable
placeholder=
"请选择您要查看的模板"
>
<!--
<el-option
label=
"自设的模板名"
value=
"使用空白模板"
></el-option>
-->
<!--
<el-option
label=
"自设的模板名"
value=
"使用空白模板"
></el-option>
-->
<el-option
<el-option
v-for=
"item in depss"
:key=
"item.id"
:label=
"item.templateName"
:value=
"item.id"
>
v-for=
"item in depss"
:key=
"item.id"
:label=
"item.templateName"
:value=
"item.id"
>
</el-option>
</el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"规则"
prop=
"rule"
>
<el-form-item
label=
"规则"
prop=
"rule"
>
<el-select
v-model=
"selectedRule"
ref=
"mySelect"
size=
"mini"
@
change=
"handleRuleChange"
filterable
placeholder=
"请选择您要查看的规则"
>
<el-select
v-model=
"selectedRule"
ref=
"mySelect"
size=
"mini"
@
change=
"handleRuleChange"
filterable
placeholder=
"请选择您要查看的规则"
>
<el-option
<el-option
v-for=
"iem in luckyrule"
:key=
"iem.id"
:label=
"iem.roleName"
:value=
"iem.id"
>
v-for=
"iem in luckyrule"
:key=
"iem.id"
:label=
"iem.roleName"
:value=
"iem.id"
>
</el-option>
</el-option>
</el-select>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item>
<el-form-item>
<el-button
icon=
"el-icon-refresh"
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button>
<el-button
icon=
"el-icon-refresh"
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"1.5"
>
<el-col
:span=
"1.5"
>
<el-button
<el-button
type=
"warning"
type=
"warning"
plain
plain
icon=
"el-icon-upload2"
icon=
"el-icon-upload2"
size=
"mini"
size=
"mini"
@
click=
"handleExport"
@
click=
"handleExport"
v-hasPermi=
"['ruoyi-myexcel:myexcel:export']"
>
导出
</el-button>
>
导出
</el-button>
</el-col>
</el-col>
<el-col
:span=
"1.5"
>
<el-col
:span=
"1.5"
>
<el-upload
<el-upload
type=
"file"
type=
"file"
name=
"file"
name=
"file"
ref=
"upload"
ref=
"upload"
:before-upload=
"handleFileChange"
:before-upload=
"handleFileChange"
action=
''
action=
''
:limit=
"1"
:limit=
"1"
:file-list=
"fileList"
:file-list=
"fileList"
:disabled=
"disableNextButton"
:disabled=
"disableNextButton"
>
<el-button
plain
size=
"mini"
icon=
"el-icon-download"
type=
"primary"
:disabled=
"disableNextButton"
>
导入
</el-button>
</el-upload>
</el-col>
</el-row>
<!-- luckysheet容器 -->
<div
id=
"luckysheet"
style=
"margin: 0px; padding: 0px; position: absolute; width: 100%;left: 0px; top: 110px; height: 1000px; z-index: 0"
>
>
<el-button
plain
size=
"mini"
icon=
"el-icon-download"
type=
"primary"
:disabled=
"disableNextButton"
>
导入
</el-button>
</div>
</el-upload>
</el-col>
</el-row>
<!-- luckysheet容器 -->
<div
id=
"luckysheet"
style=
"margin: 0px; padding: 0px; position: absolute; width: 100%;left: 0px; top: 110px; height: 1000px; z-index: 0"
>
</div>
</div>
</div>
</
template
>
</
template
>
...
@@ -72,434 +71,910 @@ var fileName="新建XLSX工作表"; //定义表名
...
@@ -72,434 +71,910 @@ var fileName="新建XLSX工作表"; //定义表名
var
rule
=
[];
var
rule
=
[];
var
tempId
;
var
tempId
;
export
default
{
export
default
{
name
:
"
Mymodule
"
,
name
:
"
Mymodule
"
,
data
()
{
data
()
{
return
{
return
{
//弹出页面的表名
//弹出页面的表名
from_name
:
""
,
from_name
:
""
,
// 是否显示弹出层
// 是否显示弹出层
dialogVisible
:
false
,
dialogVisible
:
false
,
selectedOption
:
''
,
selectedOption
:
''
,
selectedRule
:
''
,
selectedRule
:
''
,
luckysheetData
:
''
,
luckysheetData
:
''
,
fileList
:[],
fileList
:[],
disableNextButton
:
true
,
disableNextButton
:
true
,
luckyrule
:[],
luckyrule
:[],
depss
:[],
depss
:[],
// 表单参数
// 表单参数
form
:
{},
form
:
{},
// 查询参数
// 查询参数
queryParams
:
{
queryParams
:
{
status
:
0
status
:
0
},
},
};
};
},
},
created
()
{
created
()
{
//刷新页面时进行的操作
//刷新页面时进行的操作
this
.
getList
();
this
.
getList
();
},
mounted
()
{
this
.
init
();
fileName
=
"
新建XLSX工作表
"
;
},
methods
:{
/** 页面刷新时展示的数据*/
getList
()
{
listSuppliesTemplate
(
this
.
queryParams
).
then
(
response
=>
{
this
.
depss
=
response
.
rows
;
});
},
/** 下拉选和页面luckysheet绑定 */
handleOptionChange
()
{
this
.
selectedRule
=
''
;
this
.
disableNextButton
=
this
.
selectedRule
===
''
;
//根据选中的下拉选项值获取相应的信息
getSuppliesTemplate
(
this
.
selectedOption
).
then
(
response
=>
{
tempId
=
this
.
selectedOption
;
const
sysSupplies
=
response
.
rows
;
this
.
luckysheetData
=
sysSupplies
[
0
].
templateContent
;
//将接收到的json存到json_data中
//const json_data = response.data;
var
json_data
=
JSON
.
parse
(
sysSupplies
[
0
].
templateContent
);
roleList
(
this
.
selectedOption
).
then
(
response
=>
{
this
.
luckyrule
=
response
.
rows
;
});
let
suffixArr
=
sysSupplies
[
0
].
templateName
.
split
(
'
.
'
);
fileName
=
suffixArr
[
0
];
//luckysheet.destroy()
luckysheet
.
create
({
container
:
"
luckysheet
"
,
// Luckysheet 的容器元素 ID
title
:
fileName
,
// Excel 文件名
data
:
json_data
,
// Excel 数据
showinfobar
:
false
,
//是否显示顶部名称栏
lang
:
'
zh
'
,
});
}).
catch
(()
=>
{
// 处理错误逻辑,这里是一个空的错误处理函数
this
.
$message
.
error
(
'
查询失败,发生未知错误!
'
);
});
},
},
/** 规则下拉选 调佣后端的方法*/
mounted
()
{
handleRuleChange
(){
if
(
this
.
selectedOption
===
''
)
{
this
.
selectedRule
=
''
;
this
.
$message
.
warning
(
"
选择规则前请先选择模板!
"
);
return
;
// 如果按钮被禁用,提前返回,避免执行下一步操作
}
this
.
disableNextButton
=
this
.
selectedRule
===
''
;
roleListid
(
this
.
selectedRule
).
then
(
response
=>
{
rule
=
response
.
rows
;
});
},
/** 回车事件和保存提交绑定 */
handleEnter
(
event
)
{
if
(
event
.
keyCode
===
13
)
{
event
.
preventDefault
();
// 阻止默认的回车事件
// 触发确定操作
this
.
submit_from
();
}
},
/** 重置按钮操作 */
resetQuery
()
{
//刷新下拉选框内容
fileName
=
"
新建XLSX工作表
"
;
this
.
selectedOption
=
''
;
this
.
disableNextButton
=
''
;
this
.
selectedRule
=
''
;
this
.
luckyrule
=
[];
//刷新luckysheet表格
this
.
init
();
this
.
init
();
fileName
=
"
新建XLSX工作表
"
;
},
},
/** Luckyexcel文档 */
methods
:{
init
()
{
/** 页面刷新时展示的数据*/
let
options
=
{
getList
()
{
container
:
'
luckysheet
'
,
//luckysheet为容器id
listSuppliesTemplate
(
this
.
queryParams
).
then
(
response
=>
{
title
:
''
,
this
.
depss
=
response
.
rows
;
lang
:
'
zh
'
,
});
showinfobar
:
false
,
data
:[
},
{
/** 下拉选和页面luckysheet绑定 */
"
name
"
:
"
sheet1
"
,
//工作表名称
handleOptionChange
()
{
"
color
"
:
""
,
//工作表颜色
this
.
selectedRule
=
''
;
"
index
"
:
0
,
//工作表索引
this
.
disableNextButton
=
this
.
selectedRule
===
''
;
"
status
"
:
1
,
//激活状态
//根据选中的下拉选项值获取相应的信息
"
order
"
:
0
,
//工作表的下标
getSuppliesTemplate
(
this
.
selectedOption
).
then
(
response
=>
{
"
hide
"
:
0
,
//是否隐藏
tempId
=
this
.
selectedOption
;
"
row
"
:
8
,
//行数
const
sysSupplies
=
response
.
rows
;
"
column
"
:
10
,
//列数
this
.
luckysheetData
=
sysSupplies
[
0
].
templateContent
;
"
defaultRowHeight
"
:
19
,
//自定义行高
//将接收到的json存到json_data中
"
defaultColWidth
"
:
73
,
//自定义列宽
//const json_data = response.data;
"
celldata
"
:
[
var
json_data
=
JSON
.
parse
(
sysSupplies
[
0
].
templateContent
);
roleList
(
this
.
selectedOption
).
then
(
response
=>
{
this
.
luckyrule
=
response
.
rows
;
],
//初始化使用的单元格数据
});
"
config
"
:
{
let
suffixArr
=
sysSupplies
[
0
].
templateName
.
split
(
'
.
'
);
"
merge
"
:
{
fileName
=
suffixArr
[
0
];
},
//合并单元格
//luckysheet.destroy()
"
rowlen
"
:{},
//表格行高
luckysheet
.
create
({
"
columnlen
"
:{},
//表格列宽
container
:
"
luckysheet
"
,
// Luckysheet 的容器元素 ID
"
rowhidden
"
:{},
//隐藏行
title
:
fileName
,
// Excel 文件名
"
colhidden
"
:{},
//隐藏列
data
:
json_data
,
// Excel 数据
"
borderInfo
"
:{
showinfobar
:
false
,
//是否显示顶部名称栏
lang
:
'
zh
'
,
},
//边框
});
"
authority
"
:{},
//工作表保护
}).
catch
(()
=>
{
},
// 处理错误逻辑,这里是一个空的错误处理函数
},
this
.
$message
.
error
(
'
查询失败,发生未知错误!
'
);
/*{
});
"name": "Sheet2",
},
"color": "",
/** 规则下拉选 调佣后端的方法*/
"index": 1,
handleRuleChange
(){
"status": 0,
if
(
this
.
selectedOption
===
''
)
{
"order": 1,
this
.
selectedRule
=
''
;
"celldata": [],
this
.
$message
.
warning
(
"
选择规则前请先选择模板!
"
);
"config": {}
return
;
// 如果按钮被禁用,提前返回,避免执行下一步操作
},
}
{
this
.
disableNextButton
=
this
.
selectedRule
===
''
;
"name": "Sheet3",
roleListid
(
this
.
selectedRule
).
then
(
response
=>
{
"color": "",
rule
=
response
.
rows
;
"index": 2,
});
"status": 0,
"order": 2,
},
"celldata": [],
/** 回车事件和保存提交绑定 */
"config": {},
handleEnter
(
event
)
{
}*/
if
(
event
.
keyCode
===
13
)
{
]
event
.
preventDefault
();
// 阻止默认的回车事件
// 触发确定操作
}
this
.
submit_from
();
luckysheet
.
create
(
options
);
}
},
},
/** 重置按钮操作 */
resetQuery
()
{
/** 导入事件*/
//刷新下拉选框内容
handleFileChange
(
evt
)
{
fileName
=
"
新建XLSX工作表
"
;
if
(
this
.
disableNextButton
)
{
this
.
selectedOption
=
''
;
this
.
$message
.
warning
(
"
请先选择模板再进行导入!
"
);
this
.
disableNextButton
=
''
;
return
false
;
// 如果按钮被禁用,提前返回,避免执行下一步操作
this
.
selectedRule
=
''
;
}
this
.
luckyrule
=
[];
let
name
=
evt
.
name
//刷新luckysheet表格
let
suffixArr
=
name
.
split
(
'
.
'
),
this
.
init
();
suffix
=
suffixArr
[
suffixArr
.
length
-
1
]
},
if
(
suffix
!==
'
xlsx
'
)
{
/** Luckyexcel文档 */
this
.
$message
({
init
()
{
message
:
"
上传格式不正确,请上传xlsx格式文件
"
,
let
options
=
{
type
:
"
warning
"
});
container
:
'
luckysheet
'
,
//luckysheet为容器id
return
title
:
''
,
}
lang
:
'
zh
'
,
LuckyExcel
.
transformExcelToLucky
(
showinfobar
:
false
,
evt
,
data
:[
function
(
exportJson
)
{
{
if
(
exportJson
.
sheets
===
null
||
exportJson
.
sheets
.
length
===
0
)
{
"
name
"
:
"
sheet1
"
,
//工作表名称
this
.
$message
({
"
color
"
:
""
,
//工作表颜色
message
:
"
导入失败,请检查上传的文件是否正确
"
,
"
index
"
:
0
,
//工作表索引
type
:
"
warning
"
"
status
"
:
1
,
//激活状态
});
"
order
"
:
0
,
//工作表的下标
return
"
hide
"
:
0
,
//是否隐藏
"
row
"
:
8
,
//行数
"
column
"
:
10
,
//列数
"
defaultRowHeight
"
:
19
,
//自定义行高
"
defaultColWidth
"
:
73
,
//自定义列宽
"
celldata
"
:
[
],
//初始化使用的单元格数据
"
config
"
:
{
"
merge
"
:
{
},
//合并单元格
"
rowlen
"
:{},
//表格行高
"
columnlen
"
:{},
//表格列宽
"
rowhidden
"
:{},
//隐藏行
"
colhidden
"
:{},
//隐藏列
"
borderInfo
"
:{
},
//边框
"
authority
"
:{},
//工作表保护
},
},
/*{
"name": "Sheet2",
"color": "",
"index": 1,
"status": 0,
"order": 1,
"celldata": [],
"config": {}
},
{
"name": "Sheet3",
"color": "",
"index": 2,
"status": 0,
"order": 2,
"celldata": [],
"config": {},
}*/
]
}
luckysheet
.
create
(
options
);
},
/** 导入事件*/
async
handleFileChange
(
evt
)
{
let
exx
;
const
cons
=
new
Promise
((
resolve
,
reject
)
=>
{
LuckyExcel
.
transformExcelToLucky
(
evt
,
exportJson
=>
{
exx
=
exportJson
;
resolve
(
exx
);
});
});
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
data
;
//获取规则 sysRulez是物料转换 sysRules是数据汇总规则 13
for
(
let
i
=
0
;
i
<
rule
.
length
;
i
++
){
if
(
rule
[
i
].
convertStatus
==
1
){
sysRulez
=
JSON
.
parse
(
rule
[
i
].
detailContent
);
}
}
let
sysRulez
;
if
(
rule
[
i
].
convertStatus
==
2
){
let
sysRules
;
if
(
parseInt
(
rule
[
i
].
detailYS
)
===
1
){
let
value
=
[];
sysConver
=
JSON
.
parse
(
rule
[
i
].
detailContent
)
let
map
=
new
Map
();
}
else
{
//获取物料转换的规则
//
for
(
let
i
=
0
;
i
<
rule
.
length
;
i
++
){
if
(
rule
[
i
].
convertStatus
===
1
){
sysRulez
=
JSON
.
parse
(
rule
[
i
].
detailContent
);
}
if
(
rule
[
i
].
convertStatus
===
2
){
sysRules
=
JSON
.
parse
(
rule
[
i
].
detailContent
);
sysRules
=
JSON
.
parse
(
rule
[
i
].
detailContent
);
}
}
}
}
}
try
{
//获取物料转换的sheet表
//获取物料转换的sheet表
let
data
=
window
.
luckysheet
.
transToData
(
exportJson
.
sheets
[
sysRulez
[
0
].
se
].
celldata
);
data
=
window
.
luckysheet
.
transToData
(
exportJson
.
sheets
[
sysRulez
[
0
].
se
].
celldata
);
window
.
luckysheet
.
set
}
let
key_i
=
sysRulez
[
0
].
ce
;
catch
(
err
){
//获取物料转换的数据
throw
new
Error
(
"
导入失败,所选文件或规则有误
"
);
for
(
let
i
=
0
;
i
<
sysRules
.
length
;
i
++
){
}
//value.push(data[sysRules[i].re][sysRules[i].ce].m);
//获取物料转换中导入表的列,用来获取物料名
let
key_i
=
parseInt
(
sysRulez
[
0
].
ce
);
value
.
push
(
sysRules
[
i
].
ce
);
//获取物料转换的数据
}
for
(
let
i
=
0
;
i
<
sysRules
.
length
;
i
++
){
//value.push(data[sysRules[i].re][sysRules[i].ce].m);
value
.
push
(
sysRules
[
i
].
ce
);
}
//console.log("value的值为:"+value);
return
new
Promise
((
resolve
,
reject
)
=>
{
const
asyncTasks
=
[];
switch
(
tempId
)
{
case
2
:
{
let
departmentMap
=
new
Map
();
let
departments
=
[];
departmentMap
.
set
(
'
原煤
'
,
[
'
综一队
'
,
'
综二队
'
,
'
综三队
'
,
'
开一区
'
,
'
开二区
'
,
'
准备一区
'
,
'
准备二区
'
,
'
掘进一区
'
,
'
掘进二区
'
,
'
掘进三区
'
,
'
开拓项目部
'
,
'
巷修区
'
,
'
井运区
'
,
'
通风区
'
,
'
机电运转中心
'
,
'
皮带运输中心
'
]);
departmentMap
.
set
(
'
风选煤
'
,
'
洗煤厂
'
);
departmentMap
.
set
(
'
制造费用
'
,
[
'
机电检修中心
'
,
'
地测科
'
,
'
设备管理科
'
,
'
旧品利用中心
'
,
'
机修加工中心
'
,
'
网络安全与信息通讯中心
'
,
'
保卫科
'
,
'
煤质管理科
'
,
'
迁建科
'
,
'
综合服务中心
'
]);
departmentMap
.
set
(
'
管理费用
'
,
[
'
财务部
'
,
'
综合办公室
'
,
'
纪委监察科
'
,
'
工会
'
,
'
团委
'
,
'
安全管理部
'
,
'
经营管理部
'
,
'
党委组织部(人力资源部)
'
,
'
党委宣传部
'
,
'
生产技术部
'
,
'
机电运输部
'
,
'
科协
'
,
'
节能环保法律办公室
'
,
'
党委组织部
'
,
'
人力资源部
'
]);
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
let
n
=
parseInt
(
sysRules
[
0
].
ce
)
+
2
;
if
(
data
[
i
][
key_i
]
!=
null
&&
data
[
i
][
n
]
!=
null
)
{
let
num
=
data
[
i
][
n
].
m
;
//根据得到的num,找到对应的key
let
keyy
=
getKeyByValue
(
departmentMap
,
num
);
departments
.
push
(
keyy
);
}
else
{
departments
.
push
(
null
);
}
}
for
(
let
key
of
departmentMap
.
keys
())
{
let
map
=
new
Map
();
let
smallMat
=
[];
//console.log(departments);
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
if
(
data
[
i
][
key_i
]
!=
null
&&
departments
[
i
-
1
]
===
key
)
{
let
num
=
data
[
i
][
key_i
].
m
;
smallMat
.
push
(
num
);
}
else
{
smallMat
.
push
(
null
);
}
}
//console.log(smallMat);
asyncTasks
.
push
(
new
Promise
((
innerResolve
,
innerReject
)
=>
{
const
allNull
=
smallMat
.
every
(
item
=>
item
===
null
);
if
(
allNull
)
{
throw
new
Error
(
"
导入失败,导入文件错误,所选文件与模板规则不匹
"
);
}
materialConvert
(
smallMat
)
.
then
(
response
=>
{
let
array
=
response
.
rows
;
//console.log(array);
//luckysheet.setCellValue(12, 1, {bg:"#FF0000"})
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
let
values
=
[];
if
(
data
[
i
][
13
]
!=
null
&&
departments
[
i
-
1
]
===
key
&&
data
[
i
][
key_i
]
!=
null
)
{
for
(
let
j
=
0
;
j
<
value
.
length
;
j
++
)
{
let
a
=
parseFloat
(
data
[
i
][
value
[
j
]].
v
);
values
.
push
(
a
);
}
//插入多个value的值
let
index
=
smallMat
.
indexOf
(
data
[
i
][
key_i
].
m
);
let
key
=
array
[
index
];
if
(
map
.
has
(
key
))
{
let
oldValues
=
map
.
get
(
key
);
for
(
let
i
=
0
;
i
<
values
.
length
;
i
++
)
{
values
[
i
]
=
parseFloat
(
parseFloat
(
values
[
i
]
+
oldValues
[
i
]).
toFixed
(
2
));
}
map
.
set
(
key
,
values
);
}
else
{
map
.
set
(
key
,
values
);
}
}
let
smallMat
=
[];
}
for
(
let
i
=
parseInt
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
){
//循环得到汇总结果
if
(
data
[
i
][
key_i
]
!=
null
){
//console.log(map);
let
num
=
data
[
i
][
key_i
].
m
;
let
cells
;
smallMat
.
push
(
num
);
let
rowss
=
luckysheet
.
find
(
key
);
}
else
{
if
(
rowss
.
length
!=
0
)
{
smallMat
.
push
(
null
);
for
(
let
i
=
0
;
i
<
sysRules
.
length
;
i
++
)
{
map
.
forEach
((
value
,
key
)
=>
{
let
searchResult
=
luckysheet
.
find
(
key
);
if
(
searchResult
.
length
!=
0
&&
key
!=
null
)
{
cells
=
searchResult
[
0
].
column
;
luckysheet
.
setCellValue
(
rowss
[
0
].
row
,
cells
,
value
[
i
]);
luckysheet
.
setCellValue
(
rowss
[
0
].
row
,
cells
,
{
"
ct
"
:
{
"
fa
"
:
"
General
"
,
"
t
"
:
"
n
"
}
});
}
});
}
}
}).
catch
(
Error
=>
{
console
.
log
(
"
这里是单个异步请求出错处
"
);
//必须加,不能删除
innerReject
(
Error
);
// 异步请求出错
});
}));
}
}
}
}
break
;
case
6
:
{
let
deps
=
[];
let
exps
=
[];
let
map
=
new
Map
();
let
smallMat
=
[];
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
if
(
data
[
i
][
key_i
]
!=
null
)
{
let
num
=
data
[
i
][
key_i
].
m
;
let
dep
=
data
[
i
][
1
].
m
;
let
exp
=
data
[
i
][
14
].
m
;
smallMat
.
push
(
num
);
deps
.
push
(
dep
);
exps
.
push
(
exp
);
}
else
{
smallMat
.
push
(
null
);
deps
.
push
(
null
);
exps
.
push
(
null
);
}
}
//console.log(smallMat);
asyncTasks
.
push
(
new
Promise
((
innerResolve
,
innerReject
)
=>
{
const
allNull
=
smallMat
.
every
(
item
=>
item
===
null
);
const
allNull1
=
deps
.
every
(
item
=>
item
===
null
);
const
allNull2
=
exps
.
every
(
item
=>
item
===
null
);
if
(
allNull
||
allNull1
||
allNull2
)
{
throw
new
Error
(
"
导入失败,导入文件错误,所选文件与模板规则不匹
"
);
}
materialConvert
(
smallMat
)
.
then
(
response
=>
{
let
array
=
response
.
rows
;
//console.log(array);
//luckysheet.setCellValue(12, 1, {bg:"#FF0000"})
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
,
k
=
0
;
i
<
data
.
length
;
i
++
,
k
++
)
{
let
values
=
[];
if
(
data
[
i
][
key_i
]
!=
null
)
{
for
(
let
j
=
0
;
j
<
value
.
length
;
j
++
)
{
try
{
let
a
=
parseFloat
(
data
[
i
][
value
[
j
]].
v
);
values
.
push
(
a
);
}
catch
(
err
){
throw
new
Error
(
"
导入失败,导入文件不匹
"
);
}
}
//插入多个value的值
let
key
=
exps
[
k
]
+
'
/
'
+
deps
[
k
]
+
'
/
'
+
array
[
k
];
if
(
map
.
has
(
key
))
{
let
oldValues
=
map
.
get
(
key
);
for
(
let
i
=
0
;
i
<
values
.
length
;
i
++
)
{
values
[
i
]
=
parseFloat
(
parseFloat
(
values
[
i
]
+
oldValues
[
i
]).
toFixed
(
2
));
}
map
.
set
(
key
,
values
);
}
else
{
map
.
set
(
key
,
values
);
}
}
materialConvert
(
smallMat
).
then
(
response
=>
{
}
//循环得到汇总结果
let
array
=
response
.
rows
;
console
.
log
(
map
);
//luckysheet.setCellValue(12, 1, {bg:"#FF0000"})
if
(
map
.
size
===
0
)
{
for
(
let
i
=
parseInt
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
throw
new
Error
(
"
导入失败,导入文件错误
"
);
let
values
=
[];
if
(
data
[
i
][
key_i
]
!=
null
){
for
(
let
j
=
0
;
j
<
value
.
length
;
j
++
)
{
let
a
=
parseFloat
(
data
[
i
][
value
[
j
]].
v
);
if
(
isNaN
(
a
)){
a
=
0
;
}
}
values
.
push
(
a
);
//循环得到汇总结果
let
cells
;
let
rowws
;
let
con
=
0
;
let
warn
;
for
(
let
i
=
0
;
i
<
sysRules
.
length
;
i
++
)
{
map
.
forEach
((
value
,
key
)
=>
{
const
suffixArr
=
key
.
split
(
'
/
'
),
mat
=
suffixArr
[
2
],
depp
=
suffixArr
[
1
],
expp
=
suffixArr
[
0
];
//console.log(expp);console.log(depp);console.log(mat);
let
searchResult
=
luckysheet
.
find
(
expp
);
if
(
searchResult
.
length
===
0
&&
expp
==
null
)
{
warn
++
;
return
}
rowws
=
searchResult
[
0
].
row
;
for
(
let
i
=
1
;
i
<
10000000000000000000000000
;
i
++
)
{
let
n
=
rowws
+
i
;
let
gg
=
luckysheet
.
getCellValue
(
n
,
0
);
if
(
gg
!==
null
)
{
con
=
rowws
+
i
;
break
;
}
}
searchResult
=
luckysheet
.
find
(
depp
);
let
k
=
0
;
let
r
;
for
(
let
i
=
0
;
i
<
searchResult
.
length
;
i
++
){
r
=
searchResult
[
i
].
row
;
if
(
r
<
con
&&
r
>=
rowws
){
k
=
1
;
break
;
}
}
if
(
k
===
1
){
let
matResult
=
luckysheet
.
find
(
mat
);
if
(
matResult
.
length
!==
0
&&
mat
!=
null
)
{
cells
=
matResult
[
0
].
column
;
luckysheet
.
setCellValue
(
r
,
cells
,
value
[
i
]);
luckysheet
.
setCellValue
(
r
,
cells
,
{
"
ct
"
:
{
"
fa
"
:
"
General
"
,
"
t
"
:
"
n
"
}
});
}
}
});
}
}).
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
);
}
}
}
else
{
break
;
}
}
//插入多个value的值
for
(
let
j
=
0
;
j
<
value
.
length
;
j
++
)
{
let
index
=
smallMat
.
indexOf
(
data
[
i
][
key_i
].
m
);
if
(
data
[
sysRulez
[
0
].
re
][
value
[
j
]]
!=
null
)
{
let
key
=
array
[
index
];
let
num
=
data
[
sysRulez
[
0
].
re
][
value
[
j
]].
m
;
key
=
key
+
"
-
"
+
data
[
i
][
sysRulez
[
1
].
ce
].
m
smallMat
.
push
(
num
);
if
(
map
.
has
(
key
))
{
}
else
{
let
oldValues
=
map
.
get
(
key
);
smallMat
.
push
(
null
);
for
(
let
i
=
0
;
i
<
values
.
length
;
i
++
){
values
[
i
]
=
parseFloat
(
parseFloat
(
parseFloat
(
values
[
i
])
+
parseFloat
(
oldValues
[
i
])).
toFixed
(
2
));
}
}
map
.
set
(
key
,
values
);
}
else
{
map
.
set
(
key
,
values
);
}
}
}
//console.log(smallMat);
//循环得到汇总结果
asyncTasks
.
push
(
let
row
;
new
Promise
((
innerResolve
,
innerReject
)
=>
{
map
.
forEach
((
value
,
key
)
=>
{
const
allNull
=
smallMat
.
every
(
item
=>
item
===
null
);
let
splitElement
=
key
.
split
(
"
-
"
);
if
(
allNull
)
{
row
=
luckysheet
.
find
(
splitElement
[
0
])[
0
].
row
throw
new
Error
(
"
导入失败,导入文件错误,所选文件与模板规则不匹
"
);
if
(
splitElement
[
1
]
!==
'
undefined
'
)
{
}
materialConvert
(
smallMat
)
let
find
=
luckysheet
.
find
(
splitElement
[
1
])[
0
];
.
then
(
response
=>
{
if
(
find
!=
null
&&
luckysheet
.
getCellValue
(
find
.
row
,
0
)
===
0
)
{
let
array
=
response
.
rows
;
// for (let i =0;i
<
value
.
length
;
i
++
)
{
//console.log(array);
// luckysheet.setCellValue(sysConver[i].rt, sysConver[i].ct, value[i]);
//luckysheet.setCellValue(12, 1, {bg:"#FF0000"})
// luckysheet.setCellValue(sysConver[i].rt, sysConver[i].ct, {
for
(
let
i
=
parseInt
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
// "ct": {
let
values
=
[];
// "fa": "General",
if
(
data
[
i
][
key_i
]
!=
null
)
{
// "t": "n"
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
{
}
else
{
break
;
let
rowindex
;
}
let
colindex
;
//插入多个value的值
let
config
;
let
index
=
smallMat
.
indexOf
(
data
[
i
][
key_i
].
m
);
let
key
=
array
[
index
];
// let bord={
if
(
map
.
has
(
key
))
{
// "rangeType": "cell",
let
oldValues
=
map
.
get
(
key
);
// "value": {
for
(
let
i
=
0
;
i
<
values
.
length
;
i
++
)
{
// "row_index": 0,
values
[
i
]
=
parseFloat
(
parseFloat
(
parseFloat
(
values
[
i
])
+
parseFloat
(
oldValues
[
i
])).
toFixed
(
2
));
// "col_index": 0,
// "l": {
// "style": 1,
// "color": "#000000"
// },
// "r": {
// "style": 1,
// "color": "#000000"
// },
// "t": {
// "style": 1,
// "color": "#000000"
// },
// "b": {
// "style": 1,
// "color": "#000000"
// }
// }
// };
let
bord
=
{
"
rangeType
"
:
"
range
"
,
"
borderType
"
:
"
border-all
"
,
"
style
"
:
"
1
"
,
"
color
"
:
"
#000000
"
,
"
range
"
:
[{
"
row
"
:
[
0
,
0
],
"
column
"
:
[
0
,
0
]
}]
}
}
map
.
set
(
key
,
values
);
}
else
{
let
cellValue
=
luckysheet
.
getcellvalue
(
row
);
map
.
set
(
key
,
values
);
luckysheet
.
insertRow
(
row
+
1
)
}
luckysheet
.
setCellValue
(
row
+
1
,
sysRulez
[
0
].
ct
,
splitElement
[
0
]);
}
luckysheet
.
setCellValue
(
row
+
1
,
sysRulez
[
0
].
ct
,
cellValue
[
0
]);
if
(
map
.
size
===
0
)
{
throw
new
Error
(
"
导入失败,导入文件错误
"
);
// config = luckysheet.getConfig(0);
}
// bord.value.row_index = row+1;
//循环得到汇总结果
// bord.value.col_index = parseInt(sysRulez[0].ct);
let
row
;
// config.borderInfo.push(bord);
let
con
;
// luckysheet.setConfig(config);
let
warn
=
0
;
//
console
.
log
(
map
);
// config = luckysheet.getConfig(0);
for
(
let
i
=
0
;
i
<
sysRules
.
length
;
i
++
)
{
// bord.value.row_index = row+1;
// bord.value.col_index = parseInt(sysRulez[0].ct)+1;
map
.
forEach
((
value
,
key
)
=>
{
// config.borderInfo.push(bord);
let
matchingCells
=
[];
// luckysheet.setConfig(config);
let
name
=
data
[
sysRules
[
i
].
re
][
sysRules
[
i
].
ce
].
m
if
(
name
.
includes
(
"
洗煤
"
))
{
luckysheet
.
setCellValue
(
row
+
1
,
sysRulez
[
1
].
ct
,
splitElement
[
1
]);
row
=
sysRules
[
i
].
rt
;
luckysheet
.
setCellValue
(
row
+
1
,
sysRulez
[
1
].
ct
,
cellValue
[
2
]);
con
=
parseInt
(
sysRules
[
i
].
rt
)
+
10
;
}
else
{
// config = luckysheet.getConfig(0);
row
=
sysRules
[
i
].
rt
;
// bord.value.row_index = row+1;
con
=
54
;
// 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);
for
(;
row
<=
con
;
row
++
)
{
// bord.value.row_index = row+1;
let
cellValue
=
luckysheet
.
getCellValue
(
row
,
parseInt
(
sysRulez
[
0
].
ct
));
// bord.value.col_index = parseInt(sysRules[0].ct)+1;
if
(
cellValue
===
null
)
{
// config.borderInfo.push(bord);
warn
++
// luckysheet.setConfig(config);
}
else
{
if
(
cellValue
.
includes
(
key
))
{
for
(
let
i
=
0
;
i
<
value
.
length
;
i
++
)
{
luckysheet
.
setCellValue
(
row
,
sysRules
[
i
].
ct
,
value
[
i
]);
luckysheet
.
setCellValue
(
row
+
1
,
sysRules
[
i
].
ct
,
value
[
i
]);
luckysheet
.
setCellValue
(
row
,
sysRules
[
i
].
ct
,
{
luckysheet
.
setCellValue
(
row
+
1
,
sysRules
[
i
].
ct
,
{
"
ct
"
:
{
"
ct
"
:
{
"
fa
"
:
"
General
"
,
"
fa
"
:
"
General
"
,
"
t
"
:
"
n
"
"
t
"
:
"
n
"
}
});
break
;
}
else
{
}
}
});
}
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);
}
}
});
config
=
luckysheet
.
getConfig
(
0
);
}
bord
.
range
[
0
].
row
=
[
row
+
1
,
row
+
1
];
let
value2
=
[];
bord
.
range
[
0
].
column
=
[
sysRulez
[
0
].
ct
,
sysRules
[
sysRules
.
length
-
1
].
ct
];
let
map2
=
new
Map
;
config
.
borderInfo
.
push
(
bord
);
for
(
let
i
=
0
;
i
<
sysConver
.
length
;
i
++
)
{
luckysheet
.
setConfig
(
config
);
//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
;
}
}
}
else
{
//插入多个value的值
luckysheet
.
setCellValue
(
row
,
parseInt
(
sysRulez
[
1
].
ct
),
"
无
"
);
let
key
=
data
[
sysConver
[
0
].
re
][
sysConver
[
0
].
ce
].
v
;
if
(
value
[
0
]
===
0
){
if
(
map2
.
has
(
key
))
{
luckysheet
.
setCellValue
(
row
,
parseInt
(
sysRules
[
0
].
ct
)
+
1
,
0
);
let
oldValues
=
map2
.
get
(
key
);
}
else
{
for
(
let
i
=
0
;
i
<
values2
.
length
;
i
++
)
{
luckysheet
.
setCellValue
(
row
,
parseInt
(
sysRules
[
0
].
ct
)
+
1
,
value
[
1
]
/
value
[
0
]);
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
++
)
{
for
(
let
i
=
0
;
i
<
value
.
length
;
i
++
)
{
luckysheet
.
setCellValue
(
row
,
sysRules
[
i
].
ct
,
value
[
i
]);
luckysheet
.
setCellValue
(
sysConver
[
i
].
rt
,
sysConver
[
i
].
ct
,
value
[
i
]);
// config = luckysheet.getConfig(0);
luckysheet
.
setCellValue
(
sysConver
[
i
].
rt
,
sysConver
[
i
].
ct
,
{
// bord.value.row_index = row+1;
"
ct
"
:
{
// bord.value.col_index = parseInt(sysRules[i].ct);
"
fa
"
:
"
General
"
,
// config.borderInfo.push(bord);
"
t
"
:
"
n
"
// luckysheet.setConfig(config);
}
});
}
})
}).
catch
(
Error
=>
{
console
.
log
(
"
这里是单个异步请求出错处
"
);
//必须加,不能删除
innerReject
(
Error
);
// 异步请求出错
});
}));
}
break
;
case
7
:
{
let
map
=
new
Map
();
let
smallMat
=
[];
let
deps
=
[];
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
if
(
data
[
i
][
sysRulez
[
1
].
ce
]
!=
null
&&
data
[
i
][
key_i
]
!=
null
)
{
let
num
=
data
[
i
][
key_i
].
m
;
let
dep
=
data
[
i
][
sysRulez
[
1
].
ce
].
m
;
if
(
dep
){
smallMat
.
push
(
null
);
deps
.
push
(
null
);
}
else
{
smallMat
.
push
(
num
);
deps
.
push
(
dep
);
}
}
else
{
smallMat
.
push
(
null
);
deps
.
push
(
null
);
}
}
debugger
console
.
log
(
deps
);
asyncTasks
.
push
(
new
Promise
((
innerResolve
,
innerReject
)
=>
{
const
allNull
=
smallMat
.
every
(
item
=>
item
===
null
);
if
(
allNull
)
{
throw
new
Error
(
"
导入失败,导入文件错误,所选文件与模板规则不匹
"
);
}
materialConvert
(
smallMat
)
.
then
(
response
=>
{
let
array
=
response
.
rows
;
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
,
k
=
0
;
i
<
data
.
length
;
i
++
,
k
++
)
{
let
values
=
[];
if
(
data
[
i
][
key_i
]
!=
null
)
{
for
(
let
j
=
0
;
j
<
value
.
length
;
j
++
)
{
try
{
let
a
=
parseFloat
(
data
[
i
][
value
[
j
]].
v
);
values
.
push
(
a
);
}
catch
(
err
){
this
.
$message
({
message
:
"
导入失败,导入文件不匹
"
,
type
:
"
error
"
});
innerReject
(
error
);
// 异步请求出错
}
}
//插入多个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
"
,
"
style
"
:
"
1
"
,
"
color
"
:
"
#000000
"
,
"
range
"
:
[{
"
row
"
:
[
0
,
0
],
"
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
(
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
=
[
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
);
// 异步请求出错
});
});
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
(()
=>
{
}
// 处理错误逻辑,这里是一个空的错误处理函数
break
;
console
.
log
(
"
走到这了,物料转换后续处理出问题了!!
"
);
default
:
{
let
map
=
new
Map
();
let
smallMat
=
[];
for
(
let
i
=
parseFloat
(
sysRulez
[
0
].
re
)
+
1
;
i
<
data
.
length
;
i
++
)
{
if
(
data
[
i
][
key_i
]
!=
null
)
{
let
num
=
data
[
i
][
key_i
].
m
;
smallMat
.
push
(
num
);
}
else
{
smallMat
.
push
(
null
);
}
}
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
(
"
导入失败,导入文件不匹
"
);
}
}
//插入多个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
//切换到想要的sheet
luckysheet
.
setSheetActive
(
0
);
luckysheet
.
setSheetActive
(
0
);
})
Promise
.
all
(
asyncTasks
)
.
then
(()
=>
{
},
resolve
();
// 所有异步请求执行完成
})
/** 导出设置 */
.
catch
(
Error
=>
{
handleExport
:
debounce
(
function
()
{
console
.
log
(
"
这里是所有的异步请求出错处
"
);
// 处理点击事件
reject
(
Error
);
// 异步请求出错
exportExcel
(
luckysheet
.
getAllSheets
(),
fileName
)
});
},
500
),
// 设置延迟时间,单位为毫秒
});
}
},
/** 保存导入文件和生成文件 */
submit
(
contents
){
debugger
console
.
log
(
"
还是执行了保存方法
"
);
const
name
=
contents
.
info
.
name
;
let
objsheet
=
luckysheet
.
getAllSheets
()
// 得到表的数据
//LuckyExcel = objsheet // 将表的数据保存本地
let
strsheet
=
JSON
.
stringify
(
objsheet
)
// 对象转化为字符串
const
data
=
{
name
:
name
,
jsons
:
strsheet
};
/*addMyluckyexcel(data).then(response => {
if(response.code==200){
this.$message({
message: '保存成功', type: 'success'
});
this.dialogVisible=false;
//this.$router.replace({ path: '/' }); //刷新整个页面会出错
//window.location.reload();//也是全局刷新,不合适
this.$router.go(-1);
}else{
this.$message.error('保存失败');
}
});*/
},
/** 导出设置 */
handleExport
:
debounce
(
function
()
{
// 处理点击事件
exportExcel
(
luckysheet
.
getAllSheets
(),
fileName
)
},
500
),
// 设置延迟时间,单位为毫秒
}
// 配置项111
// 配置项111
};
};
// debounce函数定义
// debounce函数定义
function
debounce
(
func
,
delay
)
{
function
debounce
(
func
,
delay
)
{
let
timer
;
let
timer
;
return
function
()
{
return
function
()
{
const
context
=
this
;
const
context
=
this
;
const
args
=
arguments
;
const
args
=
arguments
;
clearTimeout
(
timer
);
clearTimeout
(
timer
);
timer
=
setTimeout
(
function
()
{
timer
=
setTimeout
(
function
()
{
func
.
apply
(
context
,
args
);
func
.
apply
(
context
,
args
);
},
delay
);
},
delay
);
};
};
}
function
getKeyByValue
(
map
,
value
)
{
for
(
let
[
key
,
val
]
of
map
)
{
if
(
val
===
value
)
{
return
key
;
}
if
(
Array
.
isArray
(
val
)
&&
val
.
includes
(
value
))
{
return
key
;
}
}
}
}
</
script
>
</
script
>
ruoyi-ui/src/views/system/supplies/indexupload.vue
View file @
fc65d5be
...
@@ -3,6 +3,7 @@
...
@@ -3,6 +3,7 @@
<el-form
ref=
"queryForm"
size=
"small"
:inline=
"true"
>
<el-form
ref=
"queryForm"
size=
"small"
:inline=
"true"
>
<el-form-item
label=
"行"
prop=
"row"
>
<el-form-item
label=
"行"
prop=
"row"
>
<el-input
<el-input
oninput=
"value=value.replace(/[^\d]/g,'')"
v-model=
"row"
v-model=
"row"
placeholder=
"请输入开始行"
placeholder=
"请输入开始行"
clearable
clearable
...
@@ -10,6 +11,12 @@
...
@@ -10,6 +11,12 @@
maxlength=
"8"
maxlength=
"8"
/>
/>
</el-form-item>
</el-form-item>
<!--
<el-form-item>
<el-checkbox
v-model=
"zero"
>
是否比较0或空
</el-checkbox>
</el-form-item>
-->
<el-form-item>
<el-checkbox
v-model=
"numm"
>
是否只比较数值
</el-checkbox>
</el-form-item>
</el-form>
</el-form>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"1.5"
>
<el-col
:span=
"1.5"
>
...
@@ -19,6 +26,7 @@
...
@@ -19,6 +26,7 @@
ref=
"upload"
ref=
"upload"
:before-upload=
"handleFileChange"
:before-upload=
"handleFileChange"
action=
''
action=
''
accept=
'.xlsx'
:limit=
"1"
:limit=
"1"
:file-list=
"fileList"
:file-list=
"fileList"
:show-file-list=
false
:show-file-list=
false
...
@@ -33,6 +41,7 @@
...
@@ -33,6 +41,7 @@
ref=
"upload"
ref=
"upload"
:before-upload=
"handleFileChange1"
:before-upload=
"handleFileChange1"
action=
''
action=
''
accept=
'.xlsx'
:limit=
"1"
:limit=
"1"
:file-list=
"fileList"
:file-list=
"fileList"
:disabled=
"disableNextButton"
:disabled=
"disableNextButton"
...
@@ -48,27 +57,30 @@
...
@@ -48,27 +57,30 @@
icon=
"el-icon-upload2"
icon=
"el-icon-upload2"
size=
"mini"
size=
"mini"
@
click=
"handleExport"
@
click=
"handleExport"
v-hasPermi=
"['ruoyi-myexcel:myexcel:export']"
>
导出
</el-button>
>
导出
</el-button>
</el-col>
</el-col>
<el-col
:span=
"1.5"
>
<el-col
:span=
"1.5"
>
<el-button
icon=
"el-icon-
refresh"
size=
"mini"
@
click=
"addToMap"
>
生成
</el-button>
<el-button
icon=
"el-icon-
s-opportunity
</el-col><el-col
:span=
"1.5"
>
"
size=
"mini"
@
click=
"addToMap"
>
生成
</el-button
>
<
el-button
icon=
"el-icon-refresh"
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button
>
<
/el-col
>
</el-col
>
<el-button
icon=
"el-icon-refresh"
size=
"mini"
@
click=
"resetQuery"
class=
"right-float"
>
重置
</el-button
>
</el-row>
</el-row>
<!-- luckysheet容器 -->
<!-- luckysheet容器 -->
<div
<div
id=
"luckysheet"
id=
"luckysheet"
style=
"margin: 0px; padding: 0px; position: absolute; width: 100%;left: 0px; top: 1
20
px; height: 1000px; z-index: 0"
style=
"margin: 0px; padding: 0px; position: absolute; width: 100%;left: 0px; top: 1
05
px; height: 1000px; z-index: 0"
>
>
</div>
</div>
</div>
</div>
</
template
>
</
template
>
<
style
>
.right-float
{
float
:
right
;
}
</
style
>
<
script
>
<
script
>
/*import luckysheet from 'luckysheet'*/
/*import luckysheet from 'luckysheet'*/
...
@@ -82,11 +94,13 @@ var fileName="新建XLSX工作表"; //定义表名
...
@@ -82,11 +94,13 @@ var fileName="新建XLSX工作表"; //定义表名
var
data1
;
var
data1
;
var
name1
;
var
name1
;
var
map
=
new
Map
();
var
map
=
new
Map
();
var
maper
=
new
Map
();
export
default
{
export
default
{
name
:
"
Mymodule
"
,
name
:
"
Mymodule
"
,
data
()
{
data
()
{
return
{
return
{
row
:
''
,
row
:
1
,
numm
:
false
,
//弹出页面的表名
//弹出页面的表名
// 是否显示弹出层
// 是否显示弹出层
fileList
:[],
fileList
:[],
...
@@ -120,10 +134,13 @@ export default {
...
@@ -120,10 +134,13 @@ export default {
//刷新下拉选框内容
//刷新下拉选框内容
fileName
=
"
新建XLSX工作表
"
;
fileName
=
"
新建XLSX工作表
"
;
this
.
disableNextButton
=
''
;
this
.
disableNextButton
=
''
;
this
.
row
=
""
;
this
.
row
=
1
;
//刷新luckysheet表格
//刷新luckysheet表格
this
.
init
();
this
.
init
();
map
.
clear
();
map
.
clear
();
maper
.
clear
();
//this.zero=false;
this
.
numm
=
false
;
},
},
/** Luckyexcel文档 */
/** Luckyexcel文档 */
init
()
{
init
()
{
...
@@ -217,17 +234,19 @@ export default {
...
@@ -217,17 +234,19 @@ export default {
userInfo
:
exportJson
.
info
.
name
.
creator
userInfo
:
exportJson
.
info
.
name
.
creator
})
})
data1
=
exportJson
.
sheets
[
0
];
data1
=
exportJson
.
sheets
[
0
];
name1
=
exportJson
.
sheets
[
0
].
name
;
let
suffixArr
=
exportJson
.
info
.
name
.
split
(
'
.
'
);
let
suffixArr
=
exportJson
.
info
.
name
.
split
(
'
.
'
);
fileName
=
suffixArr
[
0
];
fileName
=
suffixArr
[
0
];
this
.
row
=
''
;
}
}
)
)
},
},
/** 生成标签*/
/** 生成标签*/
addToMap
(){
addToMap
(){
map
.
forEach
((
value
,
key
)
=>
{
map
.
forEach
((
value
,
key
)
=>
{
for
(
let
i
=
0
;
i
<
value
.
length
;
i
++
){
for
(
let
i
=
0
;
i
<
value
.
length
;
i
++
){
let
row
=
value
[
i
][
0
],
cell
=
value
[
i
][
1
];
let
row
=
value
[
i
][
0
]
-
1
,
cell
=
this
.
stringTonum
(
value
[
i
][
1
])
-
1
;
//let row=value[i][0]-1,cell=value[i][1]-1;
let
sd
=
luckysheet
.
getCellValue
(
row
,
cell
,{
type
:
"
ps
"
});
let
sd
=
luckysheet
.
getCellValue
(
row
,
cell
,{
type
:
"
ps
"
});
if
(
sd
===
null
){
if
(
sd
===
null
){
luckysheet
.
setCellValue
(
row
,
cell
,
{
bg
:
"
#e85f5f
"
})
luckysheet
.
setCellValue
(
row
,
cell
,
{
bg
:
"
#e85f5f
"
})
...
@@ -241,6 +260,7 @@ export default {
...
@@ -241,6 +260,7 @@ export default {
"
isshow
"
:
false
//批注框为显示状态
"
isshow
"
:
false
//批注框为显示状态
}
}
})
})
maper
.
set
(
"
(
"
+
(
row
+
1
)
+
"
,
"
+
value
[
i
][
1
]
+
"
)
"
,
1
);
}
else
{
}
else
{
let
sd
=
luckysheet
.
getCellValue
(
row
,
cell
,{
type
:
"
ps
"
}).
value
;
let
sd
=
luckysheet
.
getCellValue
(
row
,
cell
,{
type
:
"
ps
"
}).
value
;
luckysheet
.
setCellValue
(
row
,
cell
,
{
luckysheet
.
setCellValue
(
row
,
cell
,
{
...
@@ -253,13 +273,74 @@ export default {
...
@@ -253,13 +273,74 @@ export default {
"
isshow
"
:
false
//批注框为显示状态
"
isshow
"
:
false
//批注框为显示状态
}
}
})
})
maper
.
set
(
"
(
"
+
(
row
+
1
)
+
"
,
"
+
value
[
i
][
1
]
+
"
)
"
,
maper
.
get
(
"
(
"
+
(
row
+
1
)
+
"
,
"
+
value
[
i
][
1
]
+
"
)
"
)
+
1
);
}
}
})
/*let num=luckysheet.getSheet().data[0].length;
let data=luckysheet.getSheet().data;
for(let j=0;j<map.size;j++){
let cell;
for(let i=0;i<num;i++){
if(data[0][i]==null){
cell=i;
break;
}
}
}
}
let dfs=map.get(2);
let a=value.join("==");
luckysheet.setCellValue(j,cell,map);
luckysheet.setCellValue(j,cell+1 ,);
}*/
let
row
;
let
num
=
luckysheet
.
getSheet
().
data
[
0
].
length
;
let
data
=
luckysheet
.
getSheet
().
data
;
for
(
let
i
=
0
;
i
<
num
;
i
++
){
if
(
data
[
i
][
0
]
==
null
){
row
=
i
;
break
;
}
}
row
=
row
+
1
;
let
k
=
0
;
for
(
let
[
key
,
value
]
of
map
.
entries
())
{
})
let
a
=
"
(
"
+
value
.
join
(
"
),(
"
)
+
"
)
"
;
luckysheet
.
setCellValue
(
row
+
k
,
0
,
key
);
luckysheet
.
setCellValue
(
row
+
k
,
1
,
a
);
k
++
}
let
froms
=
Array
.
from
(
maper
);
froms
.
sort
((
a
,
b
)
=>
{
return
b
[
1
]
-
a
[
1
];
});
for
(
let
i
=
0
;
i
<
froms
.
length
;
i
++
){
luckysheet
.
setCellValue
(
row
+
k
,
0
,
froms
[
i
][
0
]);
luckysheet
.
setCellValue
(
row
+
k
,
1
,
froms
[
i
][
1
]);
k
++
;
}
/*let k=0;
map.forEach((value,key)=>{
let num=luckysheet.getSheet().data[0].length;
let data=luckysheet.getSheet().data;
let cell;
for(let i=0;i<num;i++){
if(data[0][i]==null){
cell=i;
break;
}
}
let a=value.join("==");
luckysheet.setCellValue(k,cell,key);
luckysheet.setCellValue(k,cell+1 ,a);
k++
})
*/
},
},
handleFileChange1
(
evt
)
{
handleFileChange1
(
evt
)
{
if
(
this
.
row
===
""
)
{
if
(
this
.
row
===
""
)
{
...
@@ -278,7 +359,6 @@ export default {
...
@@ -278,7 +359,6 @@ export default {
type
:
"
warning
"
});
type
:
"
warning
"
});
return
return
}
}
LuckyExcel
.
transformExcelToLucky
(
LuckyExcel
.
transformExcelToLucky
(
evt
,
evt
,
(
exportJson
)
=>
{
(
exportJson
)
=>
{
...
@@ -289,33 +369,61 @@ export default {
...
@@ -289,33 +369,61 @@ export default {
});
});
return
return
}
}
let
ddd
=
data1
;
let
ddd
=
data1
;
let
as
=
0
;
let
as
=
0
;
let
d1
=
window
.
luckysheet
.
transToData
(
ddd
.
celldata
);
let
d1
=
window
.
luckysheet
.
transToData
(
ddd
.
celldata
);
let
d2
=
window
.
luckysheet
.
transToData
(
exportJson
.
sheets
[
0
].
celldata
);
let
d2
=
window
.
luckysheet
.
transToData
(
exportJson
.
sheets
[
0
].
celldata
);
debugger
name1
=
exportJson
.
sheets
[
0
].
name
;
let
array
=
[];
let
array
=
[];
let
r
=
this
.
row
-
1
;
let
r
=
this
.
row
-
1
;
try
{
try
{
for
(
let
i
=
r
;
i
<
d1
.
length
;
i
++
)
{
for
(
let
i
=
r
;
i
<
d1
.
length
;
i
++
)
{
for
(
let
j
=
0
;
j
<=
d1
[
0
].
length
;
j
++
)
{
for
(
let
j
=
0
;
j
<=
d1
[
0
].
length
;
j
++
)
{
//第一个表的单元格为null直接跳出
if
(
d1
[
i
][
j
]
==
null
){
if
(
d1
[
i
][
j
]
==
null
){
break
continue
}
//第二个表的单元格为null直接跳出
if
(
d2
[
i
][
j
]
==
null
){
continue
}
//第一个表内数据为0 且 第二个表只有样式内部为空
if
(
d2
[
i
][
j
].
v
==
0
&&
d1
[
i
][
j
].
v
==
undefined
){
continue
}
//第一个表内数据为0 且 第二个表只有样式内部为空
if
(
d1
[
i
][
j
].
v
==
0
&&
d2
[
i
][
j
].
v
==
undefined
){
continue
}
}
if
(
d2
[
i
][
j
]
==
null
){
// 第一个表内数据为string型 且 第二个表只有样式内部为空
break
/*if((typeof(d1[i][j].v)=="string" && d2[i][j].v==undefined)){
continue
}*/
if
((
isNaN
(
d1
[
i
][
j
].
v
)
&&
d2
[
i
][
j
].
v
==
undefined
)){
continue
}
}
if
(
d1
[
i
][
j
].
m
==
undefined
&&
d2
[
i
][
j
].
m
==
undefined
){
// 第二个表内数据为string型 且 第一个表只有样式内部为空
if
(
isNaN
(
d2
[
i
][
j
].
v
)
&&
d1
[
i
][
j
].
v
==
undefined
){
continue
}
// 没有选只比较数值 且 第一个表内数据为string型 且 第二个表内数据位string型
if
(
this
.
numm
!=
false
&&
(
isNaN
(
d1
[
i
][
j
].
v
)
&&
isNaN
(
d2
[
i
][
j
].
v
))){
continue
;
}
// 两个表的值都是0
if
(
d1
[
i
][
j
].
v
==
0
&&
d2
[
i
][
j
].
v
==
0
){
continue
}
// 两个表都是只有样式没有数据
if
(
d1
[
i
][
j
].
v
==
undefined
&&
d2
[
i
][
j
].
v
==
undefined
){
}
else
if
(
d1
[
i
][
j
].
m
==
undefined
||
d2
[
i
][
j
].
m
==
undefined
){
}
else
if
(
d1
[
i
][
j
].
v
==
undefined
||
d2
[
i
][
j
].
v
==
undefined
){
luckysheet
.
setCellValue
(
i
,
j
,
{
bg
:
"
#e85f5f
"
})
luckysheet
.
setCellValue
(
i
,
j
,
{
bg
:
"
#e85f5f
"
})
as
++
as
++
array
.
push
([
i
,
j
]);
let
s
=
this
.
numToString
(
j
+
1
);
array
.
push
([
i
+
1
,
s
]);
//array.push([i+1,j+1]);
}
else
{
}
else
{
if
(
d1
[
i
][
j
].
m
!=
d2
[
i
][
j
].
m
)
{
if
(
d1
[
i
][
j
].
v
!=
d2
[
i
][
j
].
v
)
{
luckysheet
.
setCellValue
(
i
,
j
,
{
bg
:
"
#e85f5f
"
})
luckysheet
.
setCellValue
(
i
,
j
,
{
bg
:
"
#e85f5f
"
})
//查看是否有标签
//查看是否有标签
/*luckysheet.setCellValue(i, j, {
/*luckysheet.setCellValue(i, j, {
...
@@ -330,7 +438,9 @@ export default {
...
@@ -330,7 +438,9 @@ export default {
}
}
})*/
})*/
as
++
as
++
array
.
push
([
i
,
j
]);
let
s
=
this
.
numToString
(
j
+
1
);
array
.
push
([
i
+
1
,
s
]);
//array.push([i+1,j+1]);
}
}
}
}
}
}
...
@@ -359,8 +469,39 @@ export default {
...
@@ -359,8 +469,39 @@ export default {
/** 导出设置 */
/** 导出设置 */
handleExport
:
debounce
(
function
()
{
handleExport
:
debounce
(
function
()
{
// 处理点击事件
// 处理点击事件
exportExcel
(
luckysheet
.
get
AllSheets
(),
fileName
+
"
(对比后数据)
"
)
exportExcel
(
luckysheet
.
get
Sheet
(),
fileName
+
"
(对比后数据)
"
)
},
500
),
// 设置延迟时间,单位为毫秒
},
500
),
// 设置延迟时间,单位为毫秒
numToString
(
numm
){
let
char
=
[];
char
.
length
=
0
;
let
numToStringAction
=
function
(
nnum
){
let
num
=
nnum
-
1
;
let
a
=
parseInt
(
num
/
26
);
let
b
=
num
%
26
;
char
.
push
(
String
.
fromCharCode
(
64
+
parseInt
(
b
+
1
)));
if
(
a
>
0
){
numToStringAction
(
a
);
}
}
numToStringAction
(
numm
);
return
char
.
reverse
().
join
(
""
);
},
stringTonum
(
a
)
{
var
str
=
a
.
toLowerCase
().
split
(
""
);
var
num
=
0
;
var
al
=
str
.
length
;
var
getCharNumber
=
function
(
charx
)
{
return
charx
.
charCodeAt
()
-
96
;
};
var
numout
=
0
;
var
charnum
=
0
;
for
(
var
i
=
0
;
i
<
al
;
i
++
)
{
charnum
=
getCharNumber
(
str
[
i
]);
numout
+=
charnum
*
Math
.
pow
(
26
,
al
-
i
-
1
);
}
;
return
numout
;
},
}
}
// 配置项111
// 配置项111
};
};
...
...
ruoyi-ui/src/views/system/supplies/upload.vue
0 → 100644
View file @
fc65d5be
<
template
>
<div
class=
"app-container"
>
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"1.5"
>
<el-upload
type=
"file"
name=
"file"
ref=
"upload"
:before-upload=
"handleFileChange"
action=
''
accept=
'.xlsx'
:limit=
"1"
:file-list=
"fileList"
:show-file-list=
false
>
<el-button
plain
size=
"mini"
icon=
"el-icon-download"
type=
"primary"
>
导入初始文件
</el-button>
</el-upload>
</el-col>
<el-col
:span=
"1.5"
>
<el-upload
type=
"file"
name=
"file"
ref=
"upload"
:before-upload=
"handleFileChange1"
action=
''
accept=
'.xlsx'
:limit=
"1"
:file-list=
"fileList"
:disabled=
"disableNextButton"
:show-file-list=
false
>
<el-button
plain
size=
"mini"
icon=
"el-icon-download"
type=
"primary"
:disabled=
"disableNextButton"
>
导入对比文件
</el-button>
</el-upload>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"warning"
plain
icon=
"el-icon-upload2"
size=
"mini"
@
click=
"handleExport"
>
导出
</el-button>
<el-checkbox
style=
"left: 15px"
v-model=
"numm"
>
是否只比较数值
</el-checkbox>
</el-col>
<el-col
:span=
"1.5"
>
</el-col>
<el-button
icon=
"el-icon-refresh"
size=
"mini"
@
click=
"resetQuery"
class=
"right-float"
>
重置
</el-button>
</el-row>
<!-- luckysheet容器 -->
<div
id=
"luckysheet"
style=
"margin: 0px; padding: 0px; position: absolute; width: 100%;left: 0px; top: 60px; height: 1000px; z-index: 0"
>
</div>
</div>
</
template
>
<
style
>
.right-float
{
float
:
right
;
}
</
style
>
<
script
>
/*import luckysheet from 'luckysheet'*/
import
LuckyExcel
from
'
luckyexcel
'
//导入库export.js 这个文件是es6的,不能在普通的HTML文件直接引入js文件(虽然都是js文件,但是有区别,具体请百度es6与es5)!需要把es6转es5才可以直接引入使用!
import
{
exportExcel
}
from
'
../../../../public/exportExcel
'
;
import
{
vueScript
}
from
"
@/utils/generator/html
"
;
var
fileName
=
"
新建XLSX工作表
"
;
//定义表名
var
data1
;
var
name1
;
export
default
{
name
:
"
Mymodule
"
,
data
()
{
return
{
numm
:
false
,
//弹出页面的表名
// 是否显示弹出层
fileList
:[],
disableNextButton
:
true
,
// 查询参数
queryParams
:
{
status
:
0
},
};
},
created
()
{
},
mounted
()
{
this
.
init
();
fileName
=
"
新建XLSX工作表
"
;
},
methods
:{
/** 回车事件和保存提交绑定 */
handleEnter
(
event
)
{
if
(
event
.
keyCode
===
13
)
{
event
.
preventDefault
();
// 阻止默认的回车事件
// 触发确定操作
this
.
handleFileChange1
();
}
},
/** 重置按钮操作 */
resetQuery
()
{
//刷新下拉选框内容
fileName
=
"
新建XLSX工作表
"
;
this
.
disableNextButton
=
''
;
//刷新luckysheet表格
this
.
init
();
map
.
clear
();
this
.
numm
=
false
;
},
/** Luckyexcel文档 */
init
()
{
let
options
=
{
container
:
'
luckysheet
'
,
//luckysheet为容器id
title
:
''
,
lang
:
'
zh
'
,
showinfobar
:
false
,
data
:[
{
"
name
"
:
"
sheet1
"
,
//工作表名称
"
color
"
:
""
,
//工作表颜色
"
index
"
:
0
,
//工作表索引
"
status
"
:
1
,
//激活状态
"
order
"
:
0
,
//工作表的下标
"
hide
"
:
0
,
//是否隐藏
"
row
"
:
50
,
//行数
"
column
"
:
50
,
//列数
"
defaultRowHeight
"
:
19
,
//自定义行高
"
defaultColWidth
"
:
73
,
//自定义列宽
"
celldata
"
:
[
],
//初始化使用的单元格数据
"
config
"
:
{
"
merge
"
:
{
},
//合并单元格
"
rowlen
"
:{},
//表格行高
"
columnlen
"
:{},
//表格列宽
"
rowhidden
"
:{},
//隐藏行
"
colhidden
"
:{},
//隐藏列
"
borderInfo
"
:{
},
//边框
"
authority
"
:{},
//工作表保护
},
},
/*{
"name": "Sheet2",
"color": "",
"index": 1,
"status": 0,
"order": 1,
"celldata": [],
"config": {}
},
{
"name": "Sheet3",
"color": "",
"index": 2,
"status": 0,
"order": 2,
"celldata": [],
"config": {},
}*/
]
}
luckysheet
.
create
(
options
);
},
/** 导入事件*/
handleFileChange
(
evt
)
{
this
.
disableNextButton
=
false
;
let
name
=
evt
.
name
let
suffixArr
=
name
.
split
(
'
.
'
),
suffix
=
suffixArr
[
suffixArr
.
length
-
1
]
if
(
suffix
!==
'
xlsx
'
)
{
this
.
$message
({
message
:
"
上传格式不正确,请上传xlsx格式文件
"
,
type
:
"
warning
"
});
return
}
LuckyExcel
.
transformExcelToLucky
(
evt
,
(
exportJson
)
=>
{
if
(
exportJson
.
sheets
===
null
||
exportJson
.
sheets
.
length
===
0
)
{
this
.
$message
({
message
:
"
导入失败,请检查上传的文件是否正确
"
,
type
:
"
warning
"
});
return
}
luckysheet
.
destroy
()
luckysheet
.
create
({
container
:
'
luckysheet
'
,
//luckysheet is the container id
title
:
exportJson
.
info
.
name
,
lang
:
'
zh
'
,
// 设定表格语言
showinfobar
:
false
,
data
:
exportJson
.
sheets
,
userInfo
:
exportJson
.
info
.
name
.
creator
})
data1
=
exportJson
.
sheets
[
0
];
name1
=
exportJson
.
sheets
[
0
].
name
;
let
suffixArr
=
exportJson
.
info
.
name
.
split
(
'
.
'
);
fileName
=
suffixArr
[
0
];
}
)
},
handleFileChange1
(
evt
)
{
let
name
=
evt
.
name
let
suffixArr
=
name
.
split
(
'
.
'
),
suffix
=
suffixArr
[
suffixArr
.
length
-
1
];
name
=
suffixArr
[
0
]
if
(
suffix
!==
'
xlsx
'
)
{
this
.
$message
({
message
:
"
上传格式不正确,请上传xlsx格式文件
"
,
type
:
"
warning
"
});
return
}
LuckyExcel
.
transformExcelToLucky
(
evt
,
(
exportJson
)
=>
{
if
(
exportJson
.
sheets
===
null
||
exportJson
.
sheets
.
length
===
0
)
{
this
.
$message
({
message
:
"
导入失败,请检查上传的文件是否正确
"
,
type
:
"
warning
"
});
return
}
let
ddd
=
data1
;
let
as
=
0
;
let
d1
=
window
.
luckysheet
.
transToData
(
ddd
.
celldata
);
let
d2
=
window
.
luckysheet
.
transToData
(
exportJson
.
sheets
[
0
].
celldata
);
try
{
for
(
let
i
=
0
;
i
<
d1
.
length
;
i
++
)
{
for
(
let
j
=
0
;
j
<=
d1
[
0
].
length
;
j
++
)
{
//第一个表的单元格为null直接跳出
if
(
d1
[
i
][
j
]
==
null
){
continue
}
//第二个表的单元格为null直接跳出
if
(
d2
[
i
][
j
]
==
null
){
continue
}
//第一个表内数据为0 且 第二个表只有样式内部为空
if
(
d2
[
i
][
j
].
v
==
0
&&
d1
[
i
][
j
].
v
==
undefined
){
continue
}
//第一个表内数据为0 且 第二个表只有样式内部为空
if
(
d1
[
i
][
j
].
v
==
0
&&
d2
[
i
][
j
].
v
==
undefined
){
continue
}
// 第一个表内数据为string型 且 第二个表只有样式内部为空
/*if((typeof(d1[i][j].v)=="string" && d2[i][j].v==undefined)){
continue
}*/
if
((
isNaN
(
d1
[
i
][
j
].
v
)
&&
d2
[
i
][
j
].
v
==
undefined
)){
continue
}
// 第二个表内数据为string型 且 第一个表只有样式内部为空
if
(
isNaN
(
d2
[
i
][
j
].
v
)
&&
d1
[
i
][
j
].
v
==
undefined
){
continue
}
// 没有选只比较数值 且 第一个表内数据为string型 且 第二个表内数据位string型
if
(
this
.
numm
!=
false
&&
(
isNaN
(
d1
[
i
][
j
].
v
)
&&
isNaN
(
d2
[
i
][
j
].
v
))){
continue
;
}
// 两个表的值都是0
if
(
d1
[
i
][
j
].
v
==
0
&&
d2
[
i
][
j
].
v
==
0
){
continue
}
if
(
d1
[
i
][
j
].
v
==
undefined
&&
d2
[
i
][
j
].
v
==
undefined
){
}
else
if
(
d1
[
i
][
j
].
v
==
undefined
||
d2
[
i
][
j
].
v
==
undefined
){
luckysheet
.
setCellValue
(
i
,
j
,
{
bg
:
"
#e85f5f
"
})
luckysheet
.
setCellValue
(
i
,
j
,
{
ps
:
{
//批注
"
left
"
:
92
,
//批注框左边距
"
top
"
:
10
,
//批注框上边距暖色
"
width
"
:
91
,
//批注框宽度
"
height
"
:
48
,
//批注框高度
"
value
"
:
name1
+
"
表有误
"
,
//批准内容
"
isshow
"
:
false
//批注框为显示状态
}
})
as
++
}
else
{
if
(
d1
[
i
][
j
].
v
!=
d2
[
i
][
j
].
v
)
{
luckysheet
.
setCellValue
(
i
,
j
,
{
bg
:
"
#e85f5f
"
})
//查看是否有标签
luckysheet
.
setCellValue
(
i
,
j
,
{
ps
:
{
//批注
"
left
"
:
92
,
//批注框左边距
"
top
"
:
10
,
//批注框上边距暖色
"
width
"
:
91
,
//批注框宽度
"
height
"
:
48
,
//批注框高度
"
value
"
:
name1
+
"
表有误
"
,
//批准内容
"
isshow
"
:
false
//批注框为显示状态
}
})
as
++
}
}
}
}
if
(
as
>
0
){
this
.
$message
({
message
:
"
导入完成,本次导入共发现
"
+
as
+
"
条不同数据
"
,
type
:
"
warning
"
});
}
else
{
this
.
$message
({
message
:
"
导入完成,本次导入未发现不同数据
"
,
type
:
"
success
"
});
}
}
catch
(
err
){
this
.
$message
({
message
:
"
导入失败,导入文件与对比文件有所不匹
"
,
type
:
"
error
"
});
}
}
)
},
/** 导出设置 */
handleExport
:
debounce
(
function
()
{
// 处理点击事件
exportExcel
(
luckysheet
.
getSheet
(),
fileName
+
"
(对比后数据)
"
)
},
500
),
// 设置延迟时间,单位为毫秒
}
// 配置项111
};
// debounce函数定义
function
debounce
(
func
,
delay
)
{
let
timer
;
return
function
()
{
const
context
=
this
;
const
args
=
arguments
;
clearTimeout
(
timer
);
timer
=
setTimeout
(
function
()
{
func
.
apply
(
context
,
args
);
},
delay
);
};
}
</
script
>
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