Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
T
topsun-baoshen-excel
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
何远江
topsun-baoshen-excel
Commits
23677c39
Commit
23677c39
authored
Dec 05, 2023
by
何远江
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加区域标记修改
parent
8131d776
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
84 additions
and
44 deletions
+84
-44
excel.ts
src/api/excel.ts
+3
-0
ExcelOperate.vue
...ws/comment-excel/components/ExcelOperate/ExcelOperate.vue
+81
-44
No files found.
src/api/excel.ts
View file @
23677c39
...
...
@@ -171,6 +171,9 @@ export const apiClearMark = (fileId: any) => {
export
const
addExcelArea
=
(
data
:
any
)
=>
{
return
axios
.
post
(
'/api/excelMark/addExcelArea'
,
data
)
}
export
const
editExcelArea
=
(
data
:
any
)
=>
{
return
axios
.
post
(
'/api/excelMark/editExcelArea'
,
data
)
}
export
const
getExcelAreaByFileId
=
(
orderFileId
:
string
)
=>
{
return
axios
.
get
(
'/api/excelMark/getExcelAreaByFileID'
,
{
...
...
src/views/comment-excel/components/ExcelOperate/ExcelOperate.vue
View file @
23677c39
...
...
@@ -30,20 +30,20 @@
<p
class=
"text-slate-600"
>
选择区域:
{{
getRangetxt
(
c
ach
AreaMark
.
beginRow
,
c
ach
AreaMark
.
endRow
,
c
ach
AreaMark
.
beginColum
,
c
ach
AreaMark
.
endColum
c
urrent
AreaMark
.
beginRow
,
c
urrent
AreaMark
.
endRow
,
c
urrent
AreaMark
.
beginColum
,
c
urrent
AreaMark
.
endColum
)
}}
</p>
<p
class=
"text-slate-600"
>
区域类型:
{{
c
ach
AreaMark
.
excelAreaType
||
'--'
}}
</p>
<p
class=
"text-slate-600"
>
区域别称:
{{
c
ach
AreaMark
.
excelAreaNicname
||
'--'
}}
</p>
<p
class=
"text-slate-600"
>
区域类型:
{{
c
urrent
AreaMark
.
excelAreaType
||
'--'
}}
</p>
<p
class=
"text-slate-600"
>
区域别称:
{{
c
urrent
AreaMark
.
excelAreaNicname
||
'--'
}}
</p>
<vxe-table
class=
"mb-2"
:row-config=
"
{ isCurrent: true }"
border
:data="c
ach
HeadAreaData"
:data="c
urrent
HeadAreaData"
size="mini"
height="200"
>
...
...
@@ -55,8 +55,17 @@
</vxe-column>
</vxe-table>
<el-button
type=
"primary"
size=
"small"
@
click=
"saveAreaMark"
>
保存
</el-button>
<el-button
type=
"default"
size=
"small"
@
click=
"resetCachArea()"
>
重置选区
</el-button>
<el-button
type=
"default"
size=
"small"
@
click=
"resetCachHeadArea"
>
重置标题区
</el-button>
<el-button
v-if=
"currentAreaMark.excelAreaId"
type=
"default"
size=
"small"
@
click=
"resetCurrentAreaState(true)"
>
取消修改
</el-button
>
<el-button
type=
"default"
size=
"small"
@
click=
"resetCurrentArea()"
>
重置选区
</el-button>
<el-button
type=
"default"
size=
"small"
@
click=
"resetCurrentHeadArea"
>
重置标题区
</el-button
>
</div>
<div
class=
"mt-6 pl-2 pr-2 pb-2 text-sm border-b-2"
>
...
...
@@ -71,12 +80,12 @@
>
<vxe-column
title=
"sheet"
field=
"sheetNum"
width=
"60"
></vxe-column>
<vxe-column
title=
"别称"
field=
"excelAreaNicname"
></vxe-column>
<vxe-column
title=
"区域"
field=
"area"
width=
"
9
0"
>
<vxe-column
title=
"区域"
field=
"area"
width=
"
8
0"
>
<
template
#
default=
"{ row }"
>
{{
getRangetxt
(
row
.
beginRow
,
row
.
endRow
,
row
.
beginColum
,
row
.
endColum
)
}}
</
template
>
</vxe-column>
<vxe-column
title=
"操作"
field=
"action"
width=
"
9
0"
>
<vxe-column
title=
"操作"
field=
"action"
width=
"
11
0"
>
<
template
#
default=
"{ row }"
>
<el-link
class=
"mr-1"
...
...
@@ -85,6 +94,9 @@
@
click
.
stop=
"chooseConnect(row)"
>
关联
</el-link
>
<el-link
class=
"mr-1"
style=
"font-size: 12px"
type=
"primary"
@
click=
"toModify(row)"
>
修改
</el-link
>
<el-link
style=
"font-size: 12px"
type=
"danger"
@
click=
"delAreaMark(row)"
>
删除
</el-link
>
...
...
@@ -98,8 +110,9 @@
<vxe-table
border
:data=
"connectList"
size=
"mini"
height=
"200"
>
<vxe-column
title=
"关联名称"
field=
"excelAreaId_dictText"
></vxe-column>
<vxe-column
title=
"别关联名称"
field=
"excelAreaBeId_dictText"
></vxe-column>
<vxe-column
title=
"操作"
field=
"action"
width=
"
6
0"
>
<vxe-column
title=
"操作"
field=
"action"
width=
"
8
0"
>
<
template
#
default=
"{ row, $rowIndex }"
>
<el-link
style=
"font-size: 12px"
type=
"primary"
>
修改
</el-link>
<el-link
style=
"font-size: 12px"
type=
"danger"
@
click=
"delConnect(row, $rowIndex)"
>
删除
</el-link
>
...
...
@@ -177,7 +190,7 @@ import {
showsheetbarConfig
,
showstatisticBarConfig
}
from
'@/constants/excelConfig'
import
{
flatten
}
from
'lodash-es'
import
{
flatten
,
cloneDeep
}
from
'lodash-es'
import
{
useCommentExcel
}
from
'@/stores/commentExcel'
import
{
storeToRefs
}
from
'pinia'
import
{
isFunction
}
from
'@/utils/is'
...
...
@@ -185,6 +198,7 @@ import { ElMessage, ElMessageBox } from 'element-plus'
import
{
addExcelArea
,
addExcelAreaConnect
,
editExcelArea
,
excelMarkRun
,
getExcelAreaByFileId
,
getExcelConnectByFileId
,
...
...
@@ -215,7 +229,7 @@ const beConnectData = computed(() =>
areaList
.
value
.
filter
((
v
:
any
)
=>
v
.
excelAreaId
!=
currentConnectInfo
.
excelAreaId
)
)
const
formState
=
reactive
({
excelAreaId
:
''
,
//
excelAreaId: '',
fileId
:
''
,
sheetNum
:
0
,
beginRow
:
''
,
...
...
@@ -275,20 +289,20 @@ const cellClick = ({ row }) => {
},
100
)
}
const
c
ach
AreaMark
=
reactive
<
Recordable
>
({})
const
c
achHeadAreaData
=
computed
(()
=>
cach
AreaMark
?.
excelAreaTitle
||
[])
const
c
urrent
AreaMark
=
reactive
<
Recordable
>
({})
const
c
urrentHeadAreaData
=
computed
(()
=>
current
AreaMark
?.
excelAreaTitle
||
[])
const
setAreaMark
=
async
(
type
:
'data'
|
'head'
=
'data'
)
=>
{
if
(
type
===
'data'
)
{
/**
* 判断是否有未保存的区域
* 如果有未保存的标记 -> 提示用户,是否覆盖
*/
if
(
c
achAreaMark
.
beginRow
!==
''
&&
cach
AreaMark
.
beginRow
!==
undefined
)
{
if
(
c
urrentAreaMark
.
beginRow
!==
''
&&
current
AreaMark
.
beginRow
!==
undefined
)
{
await
ElMessageBox
.
confirm
(
'检测到未保存的标记,是否在覆盖当前标记区域?'
,
'提示消息'
,
{
confirmButtonText
:
'覆盖'
,
cancelButtonText
:
'取消'
})
resetC
ach
Area
(()
=>
{
resetC
urrent
Area
(()
=>
{
// 设置当前选区
luckysheet
.
setRangeShow
({
row
:
[
formState
.
beginRow
,
formState
.
endRow
],
...
...
@@ -297,7 +311,7 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => {
})
}
Object
.
assign
(
c
ach
AreaMark
,
unref
(
formState
))
Object
.
assign
(
c
urrent
AreaMark
,
unref
(
formState
))
// 设置完成之后重置表单
Object
.
assign
(
formState
,
{
excelAreaType
:
''
,
...
...
@@ -305,7 +319,7 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => {
})
}
else
{
// 判断是否在同一sheet
if
(
formState
.
sheetNum
!==
c
ach
AreaMark
.
sheetNum
)
{
if
(
formState
.
sheetNum
!==
c
urrent
AreaMark
.
sheetNum
)
{
return
ElMessage
.
error
(
'请在同一sheet页中选择数据!'
)
}
...
...
@@ -332,9 +346,9 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => {
}
// 合并组装的表头区域数据
c
ach
AreaMark
.
excelAreaTitle
?
c
ach
AreaMark
.
excelAreaTitle
.
push
(...
result
)
:
(
c
ach
AreaMark
.
excelAreaTitle
=
result
)
c
urrent
AreaMark
.
excelAreaTitle
?
c
urrent
AreaMark
.
excelAreaTitle
.
push
(...
result
)
:
(
c
urrent
AreaMark
.
excelAreaTitle
=
result
)
}
setTimeout
(()
=>
{
...
...
@@ -342,13 +356,11 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => {
luckysheet
.
setRangeFormat
(
'bg'
,
areaMarksColor
[
type
])
},
100
)
}
const
resetC
achAreaState
=
(
)
=>
{
const
resetC
urrentAreaState
=
(
isedit
:
boolean
=
false
)
=>
{
// 删除 excelAreaTitle 属性
delete
c
ach
AreaMark
.
excelAreaTitle
delete
c
urrent
AreaMark
.
excelAreaTitle
// 重置 其他属性
Object
.
assign
(
cachAreaMark
,
{
excelAreaId
:
''
,
fileId
:
''
,
const
tmp
:
Recordable
=
{
sheetNum
:
0
,
beginRow
:
''
,
beginColum
:
''
,
...
...
@@ -356,51 +368,65 @@ const resetCachAreaState = () => {
endColum
:
''
,
excelAreaType
:
''
,
excelAreaNicname
:
''
})
}
isedit
&&
(
tmp
.
excelAreaId
=
''
)
Object
.
assign
(
currentAreaMark
,
tmp
)
}
const
resetC
ach
Area
=
(
fn
?:
Function
)
=>
{
const
resetC
urrent
Area
=
(
fn
?:
Function
)
=>
{
// 清除区域颜色
luckysheet
.
setRangeShow
(
{
row
:
[
c
achAreaMark
.
beginRow
,
cach
AreaMark
.
endRow
],
column
:
[
c
achAreaMark
.
beginColum
,
cach
AreaMark
.
endColum
]
row
:
[
c
urrentAreaMark
.
beginRow
,
current
AreaMark
.
endRow
],
column
:
[
c
urrentAreaMark
.
beginColum
,
current
AreaMark
.
endColum
]
},
{
show
:
false
,
success
:
()
=>
{
luckysheet
.
setRangeFormat
(
'bg'
,
areaMarksColor
[
'default'
])
resetC
ach
AreaState
()
resetC
urrent
AreaState
()
fn
&&
fn
()
}
}
)
}
const
resetC
ach
HeadArea
=
()
=>
{
const
resetC
urrent
HeadArea
=
()
=>
{
// 清除标题区域颜色 -> 设置成数据区域颜色
luckysheet
.
setRangeShow
(
{
row
:
[
c
achAreaMark
.
beginRow
,
cach
AreaMark
.
endRow
],
column
:
[
c
achAreaMark
.
beginColum
,
cach
AreaMark
.
endColum
]
row
:
[
c
urrentAreaMark
.
beginRow
,
current
AreaMark
.
endRow
],
column
:
[
c
urrentAreaMark
.
beginColum
,
current
AreaMark
.
endColum
]
},
{
show
:
false
,
success
:
()
=>
{
luckysheet
.
setRangeFormat
(
'bg'
,
areaMarksColor
[
'data'
])
// 删除 excelAreaTitle 属性
delete
c
ach
AreaMark
.
excelAreaTitle
delete
c
urrent
AreaMark
.
excelAreaTitle
}
}
)
}
const
saveAreaMark
=
async
()
=>
{
cachAreaMark
.
fileId
=
getFileInfo
.
value
.
orderFileId
const
{
data
}
=
await
addExcelArea
(
cachAreaMark
)
// 接口保存成功之后,保存一份在本地 locaExcelAreaMarks
locaExcelAreaMarks
[
cachAreaMark
.
sheetNum
].
push
(
data
.
result
)
resetCachAreaState
()
currentAreaMark
.
fileId
=
getFileInfo
.
value
.
orderFileId
// 如果有id 调用修改,否则调用新增
const
isEdit
=
!!
currentAreaMark
.
excelAreaId
const
{
data
}
=
isEdit
?
await
editExcelArea
(
currentAreaMark
)
:
await
addExcelArea
(
currentAreaMark
)
// 接口保存成功之后,保存/更新 locaExcelAreaMarks
if
(
isEdit
)
{
const
idx
=
locaExcelAreaMarks
[
cachAreaMark
.
sheetNum
].
findIndex
(
(
v
)
=>
v
.
excelAreaId
==
cachAreaMark
.
excelAreaId
)
locaExcelAreaMarks
[
cachAreaMark
.
sheetNum
].
splice
(
idx
,
1
,
cloneDeep
(
currentAreaMark
))
}
else
{
locaExcelAreaMarks
[
currentAreaMark
.
sheetNum
].
push
(
data
.
result
)
}
resetCurrentAreaState
(
true
)
}
const
cachAreaMark
=
reactive
<
Recordable
>
({})
const
cachDelOtherSheetArea
=
reactive
<
Recordable
>
({})
const
delAreaMark
=
async
(
row
:
any
)
=>
{
// 调用接口删除
...
...
@@ -433,7 +459,19 @@ const delAreaMark = async (row: any) => {
)
locaExcelAreaMarks
[
row
.
sheetNum
].
splice
(
index
,
1
)
}
const
toModify
=
(
row
)
=>
{
// 判断当前区域是否关联了其他区域
if
(
connectList
.
value
.
find
(
(
v
)
=>
row
.
excelAreaId
==
v
.
excelAreaId
||
row
.
excelAreaId
==
v
.
excelAreaBeId
)
)
{
return
ElMessage
.
warning
(
'当前区域绑定与其他区域绑定了关联信息,请先删除关联信息之后再做修改!'
)
}
Object
.
assign
(
cachAreaMark
,
cloneDeep
(
row
))
Object
.
assign
(
currentAreaMark
,
row
)
}
const
queryArea
=
async
()
=>
{
const
{
data
}
=
await
getExcelAreaByFileId
(
getFileInfo
.
value
.
orderFileId
)
data
.
result
.
forEach
((
item
:
any
)
=>
locaExcelAreaMarks
[
item
.
sheetNum
||
0
].
push
(
item
))
...
...
@@ -464,7 +502,6 @@ const confirmConnect = () => {
addConnect
(
list
)
}
const
addConnect
=
async
(
list
:
any
)
=>
{
list
.
forEach
((
item
:
any
)
=>
{
currentConnectInfo
.
connectFiled
.
push
({
title
:
item
.
title
,
...
...
@@ -547,7 +584,7 @@ const chooseConnectOnHide = () => {
// excelAreaId: '',
// excelAreaBeId: '',
connectFiled
:
[],
beConnectFiled
:
[]
,
beConnectFiled
:
[]
// fileId: ''
})
}
...
...
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