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
b051edb6
Commit
b051edb6
authored
Dec 14, 2023
by
何远江
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加 区域的别称自带默认名称,导出功能,当选择公共区时,不能设置关联字段,标题区,可以手动填写
parent
6cd23437
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
81 additions
and
12 deletions
+81
-12
ExcelOperate.vue
...ws/comment-excel/components/ExcelOperate/ExcelOperate.vue
+81
-12
No files found.
src/views/comment-excel/components/ExcelOperate/ExcelOperate.vue
View file @
b051edb6
...
@@ -52,15 +52,23 @@
...
@@ -52,15 +52,23 @@
区域类型:{{ getAreaTypeText(currentAreaMark.excelAreaType) }}
区域类型:{{ getAreaTypeText(currentAreaMark.excelAreaType) }}
</p>
</p>
<p
class=
"text-slate-600"
>
区域别称:{{ currentAreaMark.excelAreaNicname || '--' }}
</p>
<p
class=
"text-slate-600"
>
区域别称:{{ currentAreaMark.excelAreaNicname || '--' }}
</p>
<el-checkbox
true-label=
"1"
false-label=
"0"
v-model=
"currentAreaMark.oneself"
>
是否包含自身
</el-checkbox
>
<vxe-table
<vxe-table
class=
"mb-2"
class=
"mb-2"
:row-config=
"{ isCurrent: true }"
:row-config=
"{ isCurrent: true }"
border
border
:data=
"current
HeadAreaData
"
:data=
"current
AreaMark.excelAreaTitle
"
size=
"mini"
size=
"mini"
height=
"200"
height=
"200"
:edit-config=
"{ trigger: 'click', mode: 'cell' }"
>
>
<vxe-column
title=
"title"
field=
"title"
></vxe-column>
<vxe-column
title=
"title"
field=
"title"
:edit-render=
"{}"
>
<
template
#
edit=
"{ row }"
>
<el-input
v-model=
"row.title"
size=
"small"
></el-input>
</
template
>
</vxe-column>
<vxe-column
title=
"单元格"
field=
"cell"
width=
"90"
>
<vxe-column
title=
"单元格"
field=
"cell"
width=
"90"
>
<
template
#
default=
"{ row }"
>
<
template
#
default=
"{ row }"
>
{{
getRangetxt
(
row
.
row
,
row
.
row
,
row
.
colum
,
row
.
colum
)
}}
{{
getRangetxt
(
row
.
row
,
row
.
row
,
row
.
colum
,
row
.
colum
)
}}
...
@@ -166,8 +174,8 @@
...
@@ -166,8 +174,8 @@
</vxe-modal>
</vxe-modal>
<vxe-modal
v-model=
"connectVisible"
width=
"700"
title=
"关联信息配置"
show-footer
>
<vxe-modal
v-model=
"connectVisible"
width=
"700"
title=
"关联信息配置"
show-footer
>
<p>
关联区域信息:
</p>
<p>
关联区域信息:
{{ currentConnectInfo.excelAreaNicname }}
</p>
<p>
被关联信息:
</p>
<p>
被关联信息:
{{ cachCurrentBeConnectInfo.excelAreaNicname }}
</p>
<vxe-table
<vxe-table
class=
"mt-2"
class=
"mt-2"
...
@@ -195,7 +203,8 @@
...
@@ -195,7 +203,8 @@
</vxe-modal>
</vxe-modal>
<vxe-modal
width=
"1200"
title=
"解析结果"
v-model=
"runResultVisible"
>
<vxe-modal
width=
"1200"
title=
"解析结果"
v-model=
"runResultVisible"
>
<vxe-table
size=
"mini"
:data=
"runResultData"
border
height=
"600"
>
<el-button
@
click=
"exportRunData"
>
导出数据
</el-button>
<vxe-table
ref=
"runDataTable"
size=
"mini"
:data=
"runResultData"
border
height=
"600"
>
<vxe-column
title=
"行号"
field=
"sortNum"
width=
"120"
></vxe-column>
<vxe-column
title=
"行号"
field=
"sortNum"
width=
"120"
></vxe-column>
<
template
v-for=
"item in runResultTitle"
:key=
"item"
>
<
template
v-for=
"item in runResultTitle"
:key=
"item"
>
<vxe-column
:title=
"item"
:field=
"item"
width=
"120"
></vxe-column>
<vxe-column
:title=
"item"
:field=
"item"
width=
"120"
></vxe-column>
...
@@ -234,7 +243,6 @@ import {
...
@@ -234,7 +243,6 @@ import {
import
type
{
Recordable
}
from
'@/types/global'
import
type
{
Recordable
}
from
'@/types/global'
import
{
getRangetxt
}
from
'@/utils/excel'
import
{
getRangetxt
}
from
'@/utils/excel'
import
type
{
VxeTableInstance
}
from
'vxe-table'
import
type
{
VxeTableInstance
}
from
'vxe-table'
import
axios
from
'axios'
import
{
apiDictFindById
,
apiDictList
}
from
'@/api/common'
import
{
apiDictFindById
,
apiDictList
}
from
'@/api/common'
const
settingForm
=
ref
<
FormInstance
>
()
const
settingForm
=
ref
<
FormInstance
>
()
...
@@ -259,6 +267,7 @@ const currentConnectInfo = reactive<Recordable>({
...
@@ -259,6 +267,7 @@ const currentConnectInfo = reactive<Recordable>({
beConnectFiled
:
[],
beConnectFiled
:
[],
fileId
:
''
fileId
:
''
})
})
const
runDataTable
=
ref
<
VxeTableInstance
>
()
const
cachCurrentConnectInfo
=
reactive
<
Recordable
>
({})
const
cachCurrentConnectInfo
=
reactive
<
Recordable
>
({})
const
cachCurrentBeConnectInfo
=
reactive
<
Recordable
>
({})
const
cachCurrentBeConnectInfo
=
reactive
<
Recordable
>
({})
const
beConnectData
=
computed
(()
=>
{
const
beConnectData
=
computed
(()
=>
{
...
@@ -289,6 +298,15 @@ const formState = reactive({
...
@@ -289,6 +298,15 @@ const formState = reactive({
excelAreaNicname
:
''
excelAreaNicname
:
''
})
})
watch
(
()
=>
formState
.
excelAreaType
,
(
val
)
=>
{
formState
.
excelAreaNicname
=
val
?
areaTypeSelectOption
.
value
.
find
((
v
)
=>
v
.
value
==
val
).
label
+
(
areaList
.
value
.
filter
((
v
)
=>
v
.
excelAreaType
==
val
).
length
+
1
)
:
''
}
)
const
isSetSheetMark
=
ref
<
any
>
([])
const
isSetSheetMark
=
ref
<
any
>
([])
const
initIsSetSheetMark
=
(
length
:
number
)
=>
{
const
initIsSetSheetMark
=
(
length
:
number
)
=>
{
isSetSheetMark
.
value
=
Array
.
from
({
length
}).
fill
(
false
)
isSetSheetMark
.
value
=
Array
.
from
({
length
}).
fill
(
false
)
...
@@ -309,6 +327,10 @@ const initExcelAreaMarksKey = (len: number) => {
...
@@ -309,6 +327,10 @@ const initExcelAreaMarksKey = (len: number) => {
})
})
}
}
const
exportRunData
=
()
=>
{
runDataTable
.
value
?.
exportData
({
type
:
'csv'
})
}
const
setSheetAuthority
=
(
exportJson
:
any
)
=>
{
const
setSheetAuthority
=
(
exportJson
:
any
)
=>
{
exportJson
.
sheets
.
forEach
((
sheet
:
any
)
=>
{
exportJson
.
sheets
.
forEach
((
sheet
:
any
)
=>
{
// 工作表格权限
// 工作表格权限
...
@@ -338,8 +360,23 @@ const cellClick = ({ row }) => {
...
@@ -338,8 +360,23 @@ const cellClick = ({ row }) => {
},
100
)
},
100
)
}
}
const
currentAreaMark
=
reactive
<
Recordable
>
({})
const
currentAreaMark
=
reactive
<
Recordable
>
({
const
currentHeadAreaData
=
computed
(()
=>
currentAreaMark
?.
excelAreaTitle
||
[])
oneself
:
'0'
,
excelAreaTitle
:
[]
})
// const currentHeadAreaData = ref([])
// watch(
// () => currentAreaMark.excelAreaTitle,
// (val) => {
// currentHeadAreaData.value = val || []
// },
// {
// deep: true
// }
// )
// const currentHeadAreaData = computed(() => currentAreaMark?.excelAreaTitle || [])
const
setAreaMark
=
async
(
type
:
'data'
|
'head'
=
'data'
)
=>
{
const
setAreaMark
=
async
(
type
:
'data'
|
'head'
=
'data'
)
=>
{
if
(
type
===
'data'
)
{
if
(
type
===
'data'
)
{
/**
/**
...
@@ -380,8 +417,29 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => {
...
@@ -380,8 +417,29 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => {
*/
*/
const
result
=
[]
const
result
=
[]
const
rangeData
=
luckysheet
.
getRangeValue
()
const
rangeData
=
luckysheet
.
getRangeValue
()
const
{
beginColum
,
beginRow
,
endColum
,
endRow
}
=
formState
as
Recordable
const
{
beginColum
:
bc
,
beginRow
:
br
,
endColum
:
ec
,
endRow
:
er
}
=
currentAreaMark
// 判断所在区域,和位置,选择的单元格,只能在数据区边缘
if
(
beginColum
==
endColum
)
{
// 一列
if
(
beginRow
!=
br
&&
endRow
!=
er
)
{
luckysheet
.
setRangeShow
({
row
:
[
br
,
er
],
column
:
[
bc
,
ec
]
})
return
ElMessage
.
error
(
'请在当前区域选择标题区!'
)
}
}
else
if
(
beginRow
==
endRow
)
{
// 一行
if
(
beginColum
!=
bc
&&
endColum
!=
ec
)
{
luckysheet
.
setRangeShow
({
row
:
[
br
,
er
],
column
:
[
bc
,
ec
]
})
return
ElMessage
.
error
(
'请在当前区域选择标题区!'
)
}
}
const
{
beginColum
,
beginRow
,
endColum
,
endRow
}
=
formState
for
(
let
i
=
beginRow
,
r
=
0
;
i
<=
endRow
;
i
++
)
{
for
(
let
i
=
beginRow
,
r
=
0
;
i
<=
endRow
;
i
++
)
{
for
(
let
k
=
beginColum
,
c
=
0
;
k
<=
endColum
;
k
++
)
{
for
(
let
k
=
beginColum
,
c
=
0
;
k
<=
endColum
;
k
++
)
{
result
.
push
({
result
.
push
({
...
@@ -407,8 +465,6 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => {
...
@@ -407,8 +465,6 @@ const setAreaMark = async (type: 'data' | 'head' = 'data') => {
},
100
)
},
100
)
}
}
const
resetCurrentAreaState
=
(
isedit
:
boolean
=
false
)
=>
{
const
resetCurrentAreaState
=
(
isedit
:
boolean
=
false
)
=>
{
// 删除 excelAreaTitle 属性
delete
currentAreaMark
.
excelAreaTitle
// 重置 其他属性
// 重置 其他属性
const
tmp
:
Recordable
=
{
const
tmp
:
Recordable
=
{
sheetNum
:
0
,
sheetNum
:
0
,
...
@@ -417,7 +473,9 @@ const resetCurrentAreaState = (isedit: boolean = false) => {
...
@@ -417,7 +473,9 @@ const resetCurrentAreaState = (isedit: boolean = false) => {
endRow
:
''
,
endRow
:
''
,
endColum
:
''
,
endColum
:
''
,
excelAreaType
:
''
,
excelAreaType
:
''
,
excelAreaNicname
:
''
excelAreaNicname
:
''
,
excelAreaTitle
:
[],
oneself
:
'0'
}
}
isedit
&&
(
tmp
.
excelAreaId
=
''
)
isedit
&&
(
tmp
.
excelAreaId
=
''
)
Object
.
assign
(
currentAreaMark
,
tmp
)
Object
.
assign
(
currentAreaMark
,
tmp
)
...
@@ -645,6 +703,17 @@ const confirmBeConnect = () => {
...
@@ -645,6 +703,17 @@ const confirmBeConnect = () => {
}
}
Object
.
assign
(
cachCurrentBeConnectInfo
,
unref
(
data
))
Object
.
assign
(
cachCurrentBeConnectInfo
,
unref
(
data
))
currentConnectInfo
.
excelAreaBeId
=
data
.
excelAreaId
currentConnectInfo
.
excelAreaBeId
=
data
.
excelAreaId
// 如果是附加区域,那么直接关联
if
(
cachCurrentConnectInfo
.
excelAreaType
==
'attach_area'
||
data
.
excelAreaType
==
'attach_area'
)
{
return
addConnect
([]).
then
(()
=>
{
chooseVisible
.
value
=
false
})
}
// 打开关联弹窗。
// 打开关联弹窗。
chooseVisible
.
value
=
false
chooseVisible
.
value
=
false
connectVisible
.
value
=
true
connectVisible
.
value
=
true
...
...
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