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
2be5322f
Commit
2be5322f
authored
Aug 07, 2023
by
xiangjiaojunxp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
文件对比
parent
cabffdc0
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
462 additions
and
27 deletions
+462
-27
ruoyi-ui/src/views/system/supplies/indexupload.vue
ruoyi-ui/src/views/system/supplies/indexupload.vue
+103
-27
ruoyi-ui/src/views/system/supplies/upload.vue
ruoyi-ui/src/views/system/supplies/upload.vue
+359
-0
No files found.
ruoyi-ui/src/views/system/supplies/indexupload.vue
View file @
2be5322f
...
...
@@ -10,6 +10,12 @@
maxlength=
"8"
/>
</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-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"1.5"
>
...
...
@@ -60,7 +66,7 @@
<!-- luckysheet容器 -->
<div
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>
...
...
@@ -81,11 +87,13 @@ var fileName="新建XLSX工作表"; //定义表名
var
data1
;
var
name1
;
var
map
=
new
Map
();
var
maper
=
new
Map
();
export
default
{
name
:
"
Mymodule
"
,
data
()
{
return
{
row
:
''
,
numm
:
false
,
//弹出页面的表名
// 是否显示弹出层
fileList
:[],
...
...
@@ -123,6 +131,9 @@ export default {
//刷新luckysheet表格
this
.
init
();
map
.
clear
();
maper
.
clear
();
//this.zero=false;
this
.
numm
=
false
;
},
/** Luckyexcel文档 */
init
()
{
...
...
@@ -216,6 +227,7 @@ export default {
userInfo
:
exportJson
.
info
.
name
.
creator
})
data1
=
exportJson
.
sheets
[
0
];
name1
=
exportJson
.
sheets
[
0
].
name
;
let
suffixArr
=
exportJson
.
info
.
name
.
split
(
'
.
'
);
fileName
=
suffixArr
[
0
];
}
...
...
@@ -224,10 +236,10 @@ export default {
},
/** 生成标签*/
addToMap
(){
console
.
debug
(
map
);
map
.
forEach
((
value
,
key
)
=>
{
for
(
let
i
=
0
;
i
<
value
.
length
;
i
++
){
let
row
=
value
[
i
][
0
]
-
1
,
cell
=
value
[
i
][
1
]
-
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
"
});
if
(
sd
===
null
){
luckysheet
.
setCellValue
(
row
,
cell
,
{
bg
:
"
#e85f5f
"
})
...
...
@@ -241,6 +253,7 @@ export default {
"
isshow
"
:
false
//批注框为显示状态
}
})
maper
.
set
(
"
(
"
+
(
row
+
1
)
+
"
,
"
+
value
[
i
][
1
]
+
"
)
"
,
1
);
}
else
{
let
sd
=
luckysheet
.
getCellValue
(
row
,
cell
,{
type
:
"
ps
"
}).
value
;
luckysheet
.
setCellValue
(
row
,
cell
,
{
...
...
@@ -253,6 +266,7 @@ export default {
"
isshow
"
:
false
//批注框为显示状态
}
})
maper
.
set
(
"
(
"
+
(
row
+
1
)
+
"
,
"
+
value
[
i
][
1
]
+
"
)
"
,
maper
.
get
(
"
(
"
+
(
row
+
1
)
+
"
,
"
+
value
[
i
][
1
]
+
"
)
"
)
+
1
);
}
}
...
...
@@ -275,24 +289,34 @@ export default {
}*/
let
cell
;
let
row
;
let
num
=
luckysheet
.
getSheet
().
data
[
0
].
length
;
let
data
=
luckysheet
.
getSheet
().
data
;
for
(
let
j
=
0
;
j
<
map
.
size
;
j
++
){
for
(
let
i
=
0
;
i
<
num
;
i
++
){
if
(
data
[
0
][
i
]
==
null
){
cell
=
i
;
break
;
}
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
(
k
,
cell
,
key
);
luckysheet
.
setCellValue
(
k
,
cell
+
1
,
a
);
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;
...
...
@@ -329,7 +353,6 @@ export default {
type
:
"
warning
"
});
return
}
LuckyExcel
.
transformExcelToLucky
(
evt
,
(
exportJson
)
=>
{
...
...
@@ -345,34 +368,54 @@ export default {
let
as
=
0
;
let
d1
=
window
.
luckysheet
.
transToData
(
ddd
.
celldata
);
let
d2
=
window
.
luckysheet
.
transToData
(
exportJson
.
sheets
[
0
].
celldata
);
name1
=
exportJson
.
sheets
[
0
].
name
;
let
array
=
[];
let
r
=
this
.
row
-
1
;
try
{
for
(
let
i
=
r
;
i
<
d1
.
length
;
i
++
)
{
for
(
let
j
=
0
;
j
<=
d1
[
0
].
length
;
j
++
)
{
if
(
d1
[
i
][
j
]
==
null
){
break
debugger
//第一个表的单元格为null直接跳出
if
(
d1
[
i
][
j
]
==
null
){
continue
}
//第二个表的单元格为null直接跳出
if
(
d2
[
i
][
j
]
==
null
){
continue
}
if
(
d2
[
i
][
j
]
==
null
){
break
//第一个表内数据为0 且 第二个表只有样式内部为空
if
(
d2
[
i
][
j
].
v
==
0
&&
d1
[
i
][
j
].
v
==
undefined
){
continue
}
if
(
d1
[
i
][
j
].
v
==
0
&&
d2
[
i
][
j
].
v
==
undefined
){
break
//第一个表内数据为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
}
// 第二个表内数据为string型 且 第一个表只有样式内部为空
if
((
typeof
(
d2
[
i
][
j
].
v
)
==
"
string
"
&&
d1
[
i
][
j
].
v
==
undefined
)){
continue
}
if
(
d1
[
i
][
j
].
v
==
0
&&
d2
[
i
][
j
].
v
==
null
){
break
// 没有选只比较数值 且 第一个表内数据为string型 且 第二个表内数据位string型
if
(
this
.
numm
!=
false
&&
(
typeof
(
d1
[
i
][
j
].
v
)
==
"
string
"
&&
typeof
(
d2
[
i
][
j
].
v
)
==
"
string
"
)){
continue
;
}
if
(
d1
[
i
][
j
].
v
==
0
&&
d2
[
i
][
j
].
v
==
0
){
break
// 两个表的值都是0
if
(
d1
[
i
][
j
].
v
==
0
&&
d2
[
i
][
j
].
v
==
0
){
continue
}
if
(
d1
[
i
][
j
].
v
==
undefined
&&
d2
[
i
][
j
].
v
==
undefined
){
// 两个表都是只有样式没有数据
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
"
})
as
++
array
.
push
([
i
+
1
,
j
+
1
]);
let
s
=
this
.
numToString
(
j
+
1
);
array
.
push
([
i
+
1
,
s
]);
//array.push([i+1,j+1]);
}
else
{
if
(
d1
[
i
][
j
].
v
!=
d2
[
i
][
j
].
v
)
{
luckysheet
.
setCellValue
(
i
,
j
,
{
bg
:
"
#e85f5f
"
})
...
...
@@ -389,7 +432,9 @@ export default {
}
})*/
as
++
array
.
push
([
i
+
1
,
j
+
1
]);
let
s
=
this
.
numToString
(
j
+
1
);
array
.
push
([
i
+
1
,
s
]);
//array.push([i+1,j+1]);
}
}
}
...
...
@@ -420,6 +465,37 @@ export default {
// 处理点击事件
exportExcel
(
luckysheet
.
getSheet
(),
fileName
+
"
(对比后数据)
"
)
},
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
};
...
...
ruoyi-ui/src/views/system/supplies/upload.vue
0 → 100644
View file @
2be5322f
<
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=
''
: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=
''
: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-col>
<el-col
:span=
"1.5"
>
<el-button
icon=
"el-icon-refresh"
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button>
<el-checkbox
style=
"left: 20px"
v-model=
"numm"
>
是否只比较数值
</el-checkbox>
</el-col>
<el-col
:span=
"1.5"
>
</el-col>
<el-col
:span=
"1.5"
>
</el-col>
</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
>
<
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
{
row
:
''
,
numm
:
true
,
//弹出页面的表名
// 是否显示弹出层
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
=
true
;
},
/** 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
}
// 第二个表内数据为string型 且 第一个表只有样式内部为空
if
((
typeof
(
d2
[
i
][
j
].
v
)
==
"
string
"
&&
d1
[
i
][
j
].
v
==
undefined
)){
continue
}
// 没有选只比较数值 且 第一个表内数据为string型 且 第二个表内数据位string型
if
(
this
.
numm
!=
false
&&
typeof
(
d1
[
i
][
j
].
v
)
==
"
string
"
&&
typeof
(
d2
[
i
][
j
].
v
)
==
"
string
"
){
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