Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
H
huamu
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
郭铭瑶
huamu
Commits
1b0fe358
Commit
1b0fe358
authored
Sep 14, 2021
by
郭铭瑶
🤘
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
导出活动详情及修改活动
parent
65527759
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
306 additions
and
97 deletions
+306
-97
useExportFile.ts
src/hooks/useExportFile.ts
+51
-16
useFetch.ts
src/hooks/useFetch.ts
+7
-0
activity-list-modal.vue
src/view/components/activity-list-modal.vue
+15
-2
new-activity-drawer.vue
src/view/components/new-activity-drawer.vue
+232
-78
main.vue
src/view/main.vue
+1
-1
No files found.
src/hooks/useExportFile.ts
View file @
1b0fe358
import
{
saveAs
}
from
'file-saver'
import
{
saveAs
}
from
'file-saver'
import
{
Packer
,
Document
,
Paragraph
,
HeadingLevel
,
TextRun
}
from
'docx'
import
{
Packer
,
Document
,
Paragraph
,
HeadingLevel
,
TextRun
,
ImageRun
,
}
from
'docx'
function
createHeading
(
text
:
string
):
Paragraph
{
function
createHeading
(
text
:
string
):
Paragraph
{
return
new
Paragraph
({
return
new
Paragraph
({
...
@@ -19,24 +26,52 @@ function createText(text: string): Paragraph {
...
@@ -19,24 +26,52 @@ function createText(text: string): Paragraph {
})
})
}
}
function
createDocument
(
data
:
any
[],
labelKey
:
string
)
{
async
function
createImage
(
key
:
string
,
urls
:
string
[])
{
const
blobs
=
await
Promise
.
all
(
urls
.
map
(
async
(
url
)
=>
await
fetch
(
url
).
then
((
r
:
any
)
=>
r
.
blob
())),
)
return
new
Paragraph
({
children
:
[
new
TextRun
({
text
:
`
${
key
}
:`
}),
...
blobs
.
map
(
(
blob
)
=>
new
ImageRun
({
data
:
blob
,
transformation
:
{
width
:
100
,
height
:
100
,
},
}),
),
],
})
}
async
function
createDocument
(
data
:
any
[],
labelKey
:
string
)
{
function
arrayToString
(
e
:
unknown
)
{
function
arrayToString
(
e
:
unknown
)
{
if
(
Array
.
isArray
(
e
))
return
e
.
join
(
','
)
if
(
Array
.
isArray
(
e
))
return
e
.
join
(
','
)
return
e
return
e
}
}
return
new
Document
({
return
new
Document
({
sections
:
data
.
map
((
item
)
=>
{
sections
:
await
Promise
.
all
(
data
.
map
(
async
(
item
)
=>
{
const
keys
=
Object
.
keys
(
item
)
const
keys
=
Object
.
keys
(
item
)
return
{
return
{
children
:
[
children
:
[
createHeading
(
item
[
labelKey
]),
createHeading
(
item
[
labelKey
]),
...
keys
.
map
((
key
)
=>
{
...(
await
Promise
.
all
(
keys
.
map
(
async
(
key
)
=>
{
if
(
key
===
'居住地址'
)
return
createText
(
''
)
if
(
key
===
'居住地址'
)
return
createText
(
''
)
if
(
key
.
startsWith
(
'_'
))
return
createText
(
''
)
if
(
key
.
includes
(
'照片'
))
return
await
createImage
(
key
,
item
[
key
])
return
createText
(
`
${
key
}
:
${
arrayToString
(
item
[
key
])}
`
)
return
createText
(
`
${
key
}
:
${
arrayToString
(
item
[
key
])}
`
)
}),
}),
)),
],
],
}
}
}),
}),
),
})
})
}
}
...
@@ -46,12 +81,12 @@ function createDocument(data: any[], labelKey: string) {
...
@@ -46,12 +81,12 @@ function createDocument(data: any[], labelKey: string) {
* @param labelKey 每个section的title取值
* @param labelKey 每个section的title取值
* @param defaultFileName 默认导出名字(可选)
* @param defaultFileName 默认导出名字(可选)
*/
*/
export
default
function
useExportFile
(
export
default
async
function
useExportFile
(
data
:
any
[],
data
:
any
[],
labelKey
:
string
,
labelKey
:
string
,
defaultFileName
:
string
=
'导出'
,
defaultFileName
:
string
=
'导出'
,
)
{
)
{
const
doc
=
createDocument
(
data
,
labelKey
)
const
doc
=
await
createDocument
(
data
,
labelKey
)
Packer
.
toBlob
(
doc
).
then
((
blob
)
=>
{
Packer
.
toBlob
(
doc
).
then
((
blob
)
=>
{
saveAs
(
blob
,
`
${
defaultFileName
}
.docx`
)
saveAs
(
blob
,
`
${
defaultFileName
}
.docx`
)
})
})
...
...
src/hooks/useFetch.ts
View file @
1b0fe358
...
@@ -35,6 +35,13 @@ export async function usePostActivity(params: QueryProps) {
...
@@ -35,6 +35,13 @@ export async function usePostActivity(params: QueryProps) {
})
})
return
res
&&
res
.
data
&&
res
.
data
.
result
return
res
&&
res
.
data
&&
res
.
data
.
result
}
}
export
async
function
usePutActivity
(
params
:
QueryProps
)
{
const
res
=
await
ajax
.
put
({
url
:
api
.
ACTIVITY
,
params
,
})
return
res
&&
res
.
data
&&
res
.
data
.
result
}
export
async
function
useFetchArea
(
params
:
QueryProps
)
{
export
async
function
useFetchArea
(
params
:
QueryProps
)
{
const
res
=
await
ajax
.
get
({
const
res
=
await
ajax
.
get
({
url
:
api
.
AREA
,
url
:
api
.
AREA
,
...
...
src/view/components/activity-list-modal.vue
View file @
1b0fe358
...
@@ -124,7 +124,10 @@ const activityList = ref([])
...
@@ -124,7 +124,10 @@ const activityList = ref([])
const
fetchList
=
useDebounce
(
async
(
query
?:
string
)
=>
{
const
fetchList
=
useDebounce
(
async
(
query
?:
string
)
=>
{
activityList
.
value
=
activityList
.
value
=
(
await
useFetchActivity
({
q
:
query
}))?.
map
((
item
:
any
)
=>
item
.
extra
)
||
[]
(
await
useFetchActivity
({
q
:
query
}))?.
map
((
item
:
any
)
=>
({
id
:
item
.
id
,
...
item
.
extra
,
}))
||
[]
})
})
onMounted
(()
=>
{
onMounted
(()
=>
{
fetchList
()
fetchList
()
...
@@ -224,7 +227,17 @@ const columns = [
...
@@ -224,7 +227,17 @@ const columns = [
},
},
},
},
{
title
:
'活动地址'
,
key
:
'活动地址'
},
{
title
:
'活动地址'
,
key
:
'活动地址'
},
{
title
:
'出席率'
,
key
:
'出席率'
},
{
title
:
'出席率'
,
key
:
'出席率'
,
render
(
row
:
any
)
{
return
h
(
'span'
,
{},
{
default
:
()
=>
(
row
[
'出席率'
]
?
`
${
row
[
'出席率'
]}
%`
:
''
)
},
)
},
},
{
title
:
'参与人数'
,
key
:
'实际参与人数'
},
{
title
:
'参与人数'
,
key
:
'实际参与人数'
},
{
{
title
:
' '
,
title
:
' '
,
...
...
src/view/components/new-activity-drawer.vue
View file @
1b0fe358
This diff is collapsed.
Click to expand it.
src/view/main.vue
View file @
1b0fe358
<
template
>
<
template
>
<
Map
ref=
"map"
/
>
<
!--
<Map
ref=
"map"
/>
--
>
<NavBar
@
focus=
"showTag = false"
@
blur=
"showTag = true"
/>
<NavBar
@
focus=
"showTag = false"
@
blur=
"showTag = true"
/>
<BasicInfo
:visible=
"showTag"
/>
<BasicInfo
:visible=
"showTag"
/>
<div
v-if=
"showReset"
class=
"reset"
@
click=
"resetMap"
>
<div
v-if=
"showReset"
class=
"reset"
@
click=
"resetMap"
>
...
...
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