Skip to content

Commit f921a40

Browse files
committed
export JSON et CSV
1 parent 6d2cf5d commit f921a40

File tree

1 file changed

+49
-3
lines changed

1 file changed

+49
-3
lines changed

src/pages/identities/export.vue

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
:rows-per-page-options="[20,50,0]"
1212
>
1313
<template v-slot:top-left>
14-
<q-btn color="positive" icon="mdi-cloud-download" size="md" flat >
14+
15+
<q-select outlined v-model="typeExport" :options="optionsExport" label="Format d'export" dense style="width:150px;"/>
16+
<q-btn color="positive" icon="mdi-cloud-download" size="md" flat @click="exportData" dense>
1517
Exporter
1618

1719
</q-btn>
@@ -25,8 +27,9 @@ import {computed, onMounted, provide, ref} from "vue";
2527
import {useRoute} from "nuxt/app";
2628
const route = useRoute()
2729
const { columns, visibleColumns, columnsType } = useColumnsIdentites()
28-
29-
30+
const typeExport=ref('CSV')
31+
const optionsExport=ref(['CSV','JSON'])
32+
let rowsData=null
3033
3134
// prise de la requete qui est dans l'url mise par le filtre
3235
const queryWithoutRead = computed(() => {
@@ -42,6 +45,7 @@ const { data: fieldsName, pending1, error1} = await useHttp('/management/identit
4245
const allFields=result.data.flatMap((enr)=>{
4346
return Object.keys(enr[enr.name].properties)
4447
})
48+
4549
return allFields.map((enr)=>{
4650
return {name:enr,field:enr,label:enr,align: 'left'}
4751
})
@@ -52,6 +56,7 @@ const { data: rows1, pending, error, refresh } = await useHttp('/management/iden
5256
method: 'GET',
5357
query:queryWithoutRead,
5458
transform: (result)=>{
59+
rowsData=result
5560
const allFields=result.data.map((enr)=>{
5661
let addF={}
5762
for (const [key, value] of Object.entries(enr?.additionalFields?.attributes||{})) {
@@ -80,6 +85,47 @@ const fieldsList = computed(() => {
8085
}, [])
8186
})
8287
88+
async function exportData(){
89+
if (typeExport.value === 'CSV'){
90+
const csv=toCsv(fieldsName,rows1)
91+
let blob=new Blob([csv],{type:'text/csv'})
92+
let link=document.createElement('a')
93+
link.href=window.URL.createObjectURL(blob)
94+
link.download="sesame-export.csv"
95+
link.click()
96+
}else if(typeExport.value === 'JSON'){
97+
let blob=new Blob([JSON.stringify(rowsData)],{type:'text/json'})
98+
let link=document.createElement('a')
99+
link.href=window.URL.createObjectURL(blob)
100+
link.download="sesame-export.json"
101+
link.click()
102+
103+
}
104+
105+
}
106+
function toCsv(fields,rows){
107+
const f=[]
108+
const fString=[]
109+
for (const [key,value] of Object.entries(fields.value)){
110+
f.push(value.name )
111+
fString.push('"' +value.name + '"')
112+
}
113+
let csv=f.join(';')
114+
const tabCsv=[]
115+
for (const [key,value] of Object.entries(rows.value)){
116+
const ligne=f.map((k)=>{
117+
if (typeof value[k] === 'string' || typeof value[k] === 'number'){
118+
return '"' + value[k] +'"'
119+
}else{
120+
return '""'
121+
}
122+
})
123+
tabCsv.push(ligne)
124+
}
125+
tabCsv.unshift(fString)
126+
return tabCsv.join("\r\n")
127+
}
128+
83129
provide('fieldsList', fieldsList.value)
84130
85131
</script>

0 commit comments

Comments
 (0)