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";
2527import {useRoute } from " nuxt/app" ;
2628const route = useRoute ()
2729const { 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
3235const 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+
83129provide (' fieldsList' , fieldsList .value )
84130
85131 </script >
0 commit comments