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
10f577e1
Commit
10f577e1
authored
Jan 16, 2024
by
何远江
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
优化设置是否拆分操作,优化显示数据类型
parent
69108bc2
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
100 additions
and
19 deletions
+100
-19
excel.ts
src/utils/excel.ts
+5
-0
EditArea.vue
src/views/comment-excel/components/EditArea/EditArea.vue
+2
-2
ExcelOperate.vue
...ws/comment-excel/components/ExcelOperate/ExcelOperate.vue
+11
-1
SetArea.vue
src/views/comment-excel/components/SetArea/SetArea.vue
+9
-2
SetAttch.vue
src/views/comment-excel/components/SetAttch/SetAttch.vue
+38
-9
SetDataArea.vue
...iews/comment-excel/components/SetDataArea/SetDataArea.vue
+3
-1
SetDataAreaTitle.vue
...nt-excel/components/SetDataAreaTitle/SetDataAreaTitle.vue
+32
-4
No files found.
src/utils/excel.ts
View file @
10f577e1
...
...
@@ -245,3 +245,8 @@ export function filterRunData(data: any) {
configs
}
}
/**比较两个单元格是否是同一个 */
export
function
compareSameCell
(
c1
,
c2
)
{
return
c1
.
sheet
==
c2
.
sheet
&&
c1
.
row
==
c2
.
row
&&
c1
.
colum
==
c2
.
colum
}
src/views/comment-excel/components/EditArea/EditArea.vue
View file @
10f577e1
...
...
@@ -139,7 +139,7 @@
></el-checkbox>
</
template
>
</vxe-column>
<vxe-column
title=
"
核心
"
field=
"numTitle"
width=
"120"
>
<vxe-column
title=
"
特性
"
field=
"numTitle"
width=
"120"
>
<
template
#
default=
"{ row }"
>
<el-input
v-model=
"row.numTitle"
size=
"small"
></el-input>
</
template
>
...
...
@@ -225,7 +225,7 @@
></el-checkbox>
</
template
>
</vxe-column>
<vxe-column
title=
"
核心
"
field=
"numTitle"
width=
"90"
>
<vxe-column
title=
"
特性
"
field=
"numTitle"
width=
"90"
>
<
template
#
default=
"{ row }"
>
<el-input
v-model=
"row.numTitle"
size=
"small"
></el-input>
</
template
>
...
...
src/views/comment-excel/components/ExcelOperate/ExcelOperate.vue
View file @
10f577e1
...
...
@@ -5,7 +5,7 @@
<el-scrollbar
height=
"100%"
>
<div
class=
"w-[420px] h-full bg-white"
>
<p
class=
"pl-2 text-lg font-bold leading-[40px] bg-slate-200"
>
标注配置
</p>
<SetArea
@
success=
"onSaveSuccess"
/>
<SetArea
@
success=
"onSaveSuccess"
:areaTypeLen=
"areaTypeLen"
/>
<div
class=
"pt-2 pl-2 pr-2 pb-2 text-sm border-t-2 border-b-2"
>
<p
class=
"font-bold"
>
标记区域
</p>
...
...
@@ -259,6 +259,16 @@ const initIsSetSheetMark = (length: number) => {
*/
const
locaExcelAreaMarks
:
Recordable
=
reactive
({})
const
areaList
=
computed
(()
=>
flatten
(
Object
.
values
(
locaExcelAreaMarks
)))
const
areaTypeLen
=
computed
(()
=>
{
return
areaList
.
value
.
reduce
((
pre
,
cur
)
=>
{
pre
[
cur
.
excelAreaType
]
+=
1
return
pre
},
{
data_area
:
0
,
public_area
:
0
,
attach_area
:
0
})
})
const
initExcelAreaMarksKey
=
(
len
:
number
)
=>
{
Array
.
from
({
length
:
len
}).
forEach
((
item
,
index
)
=>
{
Reflect
.
set
(
locaExcelAreaMarks
,
index
,
[])
...
...
src/views/comment-excel/components/SetArea/SetArea.vue
View file @
10f577e1
...
...
@@ -6,7 +6,7 @@
<el-step
title=
"附加信息"
/>
</el-steps>
<SetDataArea
v-show=
"activeStep == 0"
ref=
"setDataAreaRef"
@
next=
"nextStep"
/>
<SetDataArea
v-show=
"activeStep == 0"
:areaTypeLen=
"areaTypeLen"
ref=
"setDataAreaRef"
@
next=
"nextStep"
/>
<SetDataAreaTitle
ref=
"setDataAreaTitleRef"
v-show=
"activeStep == 1"
...
...
@@ -33,6 +33,7 @@ import { ElMessage } from 'element-plus'
import
{
storeToRefs
}
from
'pinia'
import
{
useCommentExcel
}
from
'@/stores/commentExcel'
const
props
=
defineProps
([
'areaTypeLen'
])
const
commentExcelStore
=
useCommentExcel
()
const
{
getFileInfo
}
=
storeToRefs
(
commentExcelStore
)
const
emits
=
defineEmits
([
'success'
])
...
...
@@ -42,7 +43,7 @@ const setDataAreaRef = ref()
const
setDataAreaTitleRef
=
ref
()
const
currentAreaMark
=
reactive
<
Recordable
>
({})
const
nextStep
=
(
index
=
1
,
data
:
any
)
=>
{
const
nextStep
=
async
(
index
=
1
,
data
:
any
)
=>
{
switch
(
activeStep
.
value
)
{
case
0
:
Object
.
assign
(
currentAreaMark
,
unref
(
data
))
...
...
@@ -54,6 +55,12 @@ const nextStep = (index = 1, data: any) => {
excelAreaTitle
:
data
.
excelAreaTitle
})
}
if
(
index
==
-
2
)
{
currentAreaMark
.
desGroups
=
[]
// 保存
await
saveArea
()
index
=
-
1
}
break
case
2
:
if
(
index
!=
-
1
)
{
...
...
src/views/comment-excel/components/SetAttch/SetAttch.vue
View file @
10f577e1
<
template
>
<div
class=
"set-attch-table"
>
<el-button
size=
"small"
@
click=
"back"
>
上一步
</el-button>
<p
style=
"font-size: 12px"
>
附加区域:
<el-tag>
{{
getRangetxt
(
formState
.
beginRow
,
formState
.
endRow
,
formState
.
beginColum
,
formState
.
endColum
)
...
...
@@ -55,12 +57,18 @@
</vxe-column>
<vxe-column
title=
"是否拆分"
field=
"numFlag"
width=
"70"
>
<
template
#
default=
"{ row }"
>
<el-checkbox
size=
"small"
true-label=
"Y"
false-label=
"N"
v-model=
"row.numFlag"
@
change=
"(e) => numFlagChange(e, row)"
></el-checkbox>
<el-checkbox
size=
"small"
true-label=
"Y"
false-label=
"N"
v-model=
"row.numFlag"
@
change=
"(e) => numFlagChange(e, row)"
></el-checkbox>
</
template
>
</vxe-column>
<vxe-column
title=
"
核心
"
field=
"numTitle"
width=
"90"
>
<vxe-column
title=
"
特性
"
field=
"numTitle"
width=
"90"
>
<
template
#
default=
"{ row }"
>
<el-input
v-model=
"row.numTitle"
size=
"small"
></el-input>
<el-input
:disabled=
"row.numFlag == 'N'"
v-model=
"row.numTitle"
size=
"small"
></el-input>
</
template
>
</vxe-column>
<vxe-column
title=
"操作"
field=
"action"
width=
"50"
>
...
...
@@ -71,17 +79,19 @@
</
template
>
</vxe-column>
</vxe-table>
<el-button
size=
"small"
@
click=
"back"
>
上一步
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"setAttch"
>
设置附加信息
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"setNickName"
>
设置别称
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"setAttchTitle"
>
设置标题
</el-button>
<el-button
type=
"success"
size=
"small"
@
click=
"save"
>
保存
</el-button>
<el-button-group
class=
"mt-2"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"setAttch"
>
设置附加信息
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"setNickName"
>
设置别称
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"setAttchTitle"
>
设置标题
</el-button>
<el-button
type=
"primary"
size=
"small"
@
click=
"setNumFlag"
>
设置拆分
</el-button>
<el-button
type=
"success"
size=
"small"
@
click=
"save"
>
保存
</el-button>
</el-button-group>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
reactive
,
ref
,
unref
}
from
'vue'
import
{
getRangePosition
,
getRangetxt
,
handleRangeTitle
}
from
'@/utils/excel'
import
{
compareSameCell
,
getRangePosition
,
getRangetxt
,
handleRangeTitle
}
from
'@/utils/excel'
import
type
{
Recordable
}
from
'@/types/global'
import
{
areaMarksColor
}
from
'@/constants/excelConfig'
import
{
ElMessage
}
from
'element-plus'
...
...
@@ -164,6 +174,25 @@ const setAttchTitle = () => {
luckysheet
.
setRangeFormat
(
'bg'
,
areaMarksColor
[
'attch_title'
])
}
const
setNumFlag
=
()
=>
{
if
(
!
areaTitles
.
value
.
length
)
return
const
rangeData
=
luckysheet
.
getRangeValue
()
const
titles
=
handleRangeTitle
(
rangeData
)
// 匹配到的第一个单元格下标
const
idx
=
areaTitles
.
value
.
findIndex
((
item
)
=>
{
return
compareSameCell
(
item
,
titles
[
0
])
})
if
(
idx
==
-
1
)
return
for
(
let
i
=
0
;
i
<=
titles
.
length
-
1
;
i
++
)
{
const
cell
=
areaTitles
.
value
[
i
+
idx
]
if
(
!
cell
)
return
Reflect
.
set
(
cell
,
'numFlag'
,
'Y'
)
!
cell
.
numTitle
&&
Reflect
.
set
(
cell
,
'numTitle'
,
'尺码'
)
}
}
/**
* 设置附加信息别称
* @param row
...
...
src/views/comment-excel/components/SetDataArea/SetDataArea.vue
View file @
10f577e1
...
...
@@ -136,6 +136,8 @@ import { getRangePosition, getRangetxt, setRangeBackground } from '@/utils/excel
import
{
ElMessage
,
type
FormInstance
}
from
'element-plus'
import
{
onMounted
,
reactive
,
ref
,
unref
,
watch
}
from
'vue'
const
props
=
defineProps
([
'areaTypeLen'
])
const
luckysheet
=
(
window
as
any
).
luckysheet
const
emits
=
defineEmits
([
'next'
])
const
areaTypeSelectOption
=
ref
<
Recordable
>
([])
...
...
@@ -156,7 +158,7 @@ watch(
()
=>
formState
.
excelAreaType
,
(
val
)
=>
{
if
(
val
)
{
formState
.
excelAreaNicname
=
areaTypeSelectOption
.
value
.
find
((
v
:
any
)
=>
v
.
value
==
val
).
label
formState
.
excelAreaNicname
=
areaTypeSelectOption
.
value
.
find
((
v
:
any
)
=>
v
.
value
==
val
).
label
+
(
props
.
areaTypeLen
[
val
]
||
''
)
}
}
)
...
...
src/views/comment-excel/components/SetDataAreaTitle/SetDataAreaTitle.vue
View file @
10f577e1
<
template
>
<div
class=
"excel-title-table"
>
<el-button
size=
"small"
@
click=
"nextStep(-1)"
>
上一步
</el-button>
<vxe-table
:row-config=
"
{ isCurrent: true }"
border
...
...
@@ -29,9 +30,9 @@
></el-checkbox>
</
template
>
</vxe-column>
<vxe-column
title=
"
核心
"
field=
"numTitle"
width=
"90"
>
<vxe-column
title=
"
特性
"
field=
"numTitle"
width=
"90"
>
<
template
#
default=
"{ row }"
>
<el-input
v-model=
"row.numTitle"
size=
"small"
></el-input>
<el-input
:disabled=
"row.numFlag == 'N'"
v-model=
"row.numTitle"
size=
"small"
></el-input>
</
template
>
</vxe-column>
<vxe-column
title=
"操作"
field=
"action"
width=
"50"
>
...
...
@@ -42,16 +43,17 @@
</
template
>
</vxe-column>
</vxe-table>
<el-button
size=
"small"
@
click=
"nextStep(-1)"
>
上一步
</el-button>
<el-button
size=
"small"
type=
"primary"
@
click=
"setAreaTitle"
>
标记标题
</el-button>
<el-button
size=
"small"
type=
"primary"
@
click=
"setNumFlag"
>
设置拆分
</el-button>
<el-button
size=
"small"
type=
"primary"
@
click=
"resetAreaTitle"
>
重置
</el-button>
<el-button
size=
"small"
type=
"success"
@
click=
"nextStep()"
>
下一步
</el-button>
<el-button
size=
"small"
type=
"success"
@
click=
"save"
>
保存
</el-button>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
ref
,
reactive
,
unref
}
from
'vue'
import
{
getRangetxt
,
handleRangeTitle
}
from
'@/utils/excel'
import
{
compareSameCell
,
getRangetxt
,
handleRangeTitle
}
from
'@/utils/excel'
import
{
areaMarksColor
}
from
'@/constants/excelConfig'
import
{
ElMessage
}
from
'element-plus'
import
type
{
Recordable
}
from
'@/types/global'
...
...
@@ -67,6 +69,25 @@ const emits = defineEmits(['next'])
const
excelAreaTitle
=
ref
<
Recordable
[]
>
([])
const
titleArea
=
ref
<
Recordable
[]
>
([])
/**设置拆分 */
const
setNumFlag
=
()
=>
{
if
(
!
excelAreaTitle
.
value
.
length
)
return
const
rangeData
=
luckysheet
.
getRangeValue
()
const
titles
=
handleRangeTitle
(
rangeData
)
// 匹配到的第一个单元格下标
const
idx
=
excelAreaTitle
.
value
.
findIndex
((
item
)
=>
{
return
compareSameCell
(
item
,
titles
[
0
])
})
if
(
idx
==
-
1
)
return
for
(
let
i
=
0
;
i
<=
titles
.
length
-
1
;
i
++
)
{
const
cell
=
excelAreaTitle
.
value
[
i
+
idx
]
if
(
!
cell
)
return
Reflect
.
set
(
cell
,
'numFlag'
,
'Y'
)
!
cell
.
numTitle
&&
Reflect
.
set
(
cell
,
'numTitle'
,
'尺码'
)
}
}
const
setAreaTitle
=
()
=>
{
const
sheet
=
luckysheet
.
getSheet
()
// 判断是否在同一sheet
...
...
@@ -127,6 +148,13 @@ const numFlagChange = ([val], row: any) => {
}
}
const
save
=
()
=>
{
emits
(
'next'
,
-
2
,
{
excelAreaTitle
:
unref
(
excelAreaTitle
),
titleArea
:
unref
(
titleArea
)
})
}
const
delAreaTitle
=
(
index
:
number
,
row
:
Recordable
)
=>
{
excelAreaTitle
.
value
.
splice
(
index
,
1
)
}
...
...
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