fix: 报表支持导出
This commit is contained in:
		
							parent
							
								
									cd66c3b714
								
							
						
					
					
						commit
						9917ca25f6
					
				| @ -1,4 +1,4 @@ | |||||||
| import { post } from "@/utils/request"; | import { get, post } from "@/utils/request"; | ||||||
| 
 | 
 | ||||||
| interface PreviewItemParams { | interface PreviewItemParams { | ||||||
|   previewId: string | number; |   previewId: string | number; | ||||||
| @ -20,12 +20,3 @@ export function searchInfo(data: PreviewItemParams) { | |||||||
|   }); |   }); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| export function exportTable(data: PreviewItemParams) { |  | ||||||
|   return post({ |  | ||||||
|     url: '/api/v1/preview/export', |  | ||||||
|     data: { |  | ||||||
|       preview_id: data.previewId, |  | ||||||
|       filter: data.filter, |  | ||||||
|     }, |  | ||||||
|   }) |  | ||||||
| } |  | ||||||
|  | |||||||
| @ -29,7 +29,7 @@ | |||||||
|         /> |         /> | ||||||
|         <a-range-picker v-else-if="item.type === 'time'" class="date-item" v-model:value="filterData[item.name]" @change="toFilt" /> |         <a-range-picker v-else-if="item.type === 'time'" class="date-item" v-model:value="filterData[item.name]" @change="toFilt" /> | ||||||
|       </div> |       </div> | ||||||
|       <div v-if="isExport" class="filter-item"><a-button type="primary" @click="toExport">导出</a-button></div> |       <div v-if="isExport" class="filter-item"><a :href="`${YCODE_BASEURL}/api/v1/preview/export?preview_id=${previewId}&filter=${JSON.stringify(getFilter())}`" target="_blank"><a-button type="primary">导出</a-button></a></div> | ||||||
|     </div> |     </div> | ||||||
|     <div class="y-table-content"> |     <div class="y-table-content"> | ||||||
|       <a-table |       <a-table | ||||||
| @ -58,7 +58,13 @@ import { reactive, ref } from "vue"; | |||||||
| import { useDebounceFn } from "@vueuse/core"; | import { useDebounceFn } from "@vueuse/core"; | ||||||
| import _ from "lodash"; | import _ from "lodash"; | ||||||
| 
 | 
 | ||||||
|  | const YCODE_BASEURL = import.meta.env.VITE_YCODE_BASEURL | ||||||
|  | 
 | ||||||
| const props = defineProps({ | const props = defineProps({ | ||||||
|  |   previewId: { | ||||||
|  |     type: Number, | ||||||
|  |     default: null, | ||||||
|  |   }, | ||||||
|   filterConfig: { |   filterConfig: { | ||||||
|     type: Array, |     type: Array, | ||||||
|     default: () => [], |     default: () => [], | ||||||
| @ -115,7 +121,6 @@ const getFilter = () => { | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const getData = () => { | const getData = () => { | ||||||
|    |  | ||||||
|   emit("toFilt", { |   emit("toFilt", { | ||||||
|     filter: getFilter(), |     filter: getFilter(), | ||||||
|     page: pageState.page, |     page: pageState.page, | ||||||
| @ -131,13 +136,6 @@ const pageChange = () => { | |||||||
|   getData(); |   getData(); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const toExport = () => { |  | ||||||
|   emit("toExport", { |  | ||||||
|     filter: getFilter(), |  | ||||||
|     page: pageState.page, |  | ||||||
|     perPage: pageState.perPage, |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <style lang="less" scoped> | <style lang="less" scoped> | ||||||
|  | |||||||
| @ -39,6 +39,7 @@ | |||||||
|                 <div class="card-content"> |                 <div class="card-content"> | ||||||
|                   <y-table |                   <y-table | ||||||
|                     v-if="item.data.type === VIEW_TYPE.TABLE" |                     v-if="item.data.type === VIEW_TYPE.TABLE" | ||||||
|  |                     :preview-id="item.id" | ||||||
|                     :filter-config="item.data.filter" |                     :filter-config="item.data.filter" | ||||||
|                     :data-list="item.data.data" |                     :data-list="item.data.data" | ||||||
|                     :column-config="item.data.header" |                     :column-config="item.data.header" | ||||||
| @ -46,8 +47,8 @@ | |||||||
|                     :title="item.data.preview_name" |                     :title="item.data.preview_name" | ||||||
|                     :is-export="item.data.is_export" |                     :is-export="item.data.is_export" | ||||||
|                     @toFilt=" |                     @toFilt=" | ||||||
|                     (params?:object) => { |                       (params?:object) => { | ||||||
|                       handleSingle(ids[index], params); |                         handleSingle(ids[index], params); | ||||||
|                       } |                       } | ||||||
|                     " |                     " | ||||||
|                   ></y-table> |                   ></y-table> | ||||||
| @ -78,6 +79,7 @@ | |||||||
|                   <div class="card-content"> |                   <div class="card-content"> | ||||||
|                     <y-table |                     <y-table | ||||||
|                       v-if="item.data.type === VIEW_TYPE.TABLE" |                       v-if="item.data.type === VIEW_TYPE.TABLE" | ||||||
|  |                       :preview-id="item.id" | ||||||
|                       :filter-config="item.data.filter" |                       :filter-config="item.data.filter" | ||||||
|                       :data-list="item.data.data" |                       :data-list="item.data.data" | ||||||
|                       :column-config="item.data.header" |                       :column-config="item.data.header" | ||||||
|  | |||||||
| @ -89,7 +89,7 @@ | |||||||
|               /> |               /> | ||||||
|               <a-range-picker v-if="item.type === 'time'" class="date-item" v-model:value="previewData.filterData[item.name]" @change="toFilt" /> |               <a-range-picker v-if="item.type === 'time'" class="date-item" v-model:value="previewData.filterData[item.name]" @change="toFilt" /> | ||||||
|             </div> |             </div> | ||||||
|             <div v-if="previewData.isExport" class="filter-item"><a-button @click="toExport">导出</a-button></div> |             <div v-if="previewData.isExport" class="filter-item"><a-button type="primary">导出</a-button></div> | ||||||
|           </div> |           </div> | ||||||
|           <div class="y-table-content"> |           <div class="y-table-content"> | ||||||
|             <a-table |             <a-table | ||||||
| @ -355,10 +355,6 @@ const toFilt = () => { | |||||||
|   previewData.page = 1; |   previewData.page = 1; | ||||||
|   toPreview({}); |   toPreview({}); | ||||||
| }; | }; | ||||||
| 
 |  | ||||||
| const toExport = () => { |  | ||||||
|   // exportTable() |  | ||||||
| } |  | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <style lang="less" scoped> | <style lang="less" scoped> | ||||||
|  | |||||||
| @ -73,6 +73,7 @@ | |||||||
|       <div class="right-box"> |       <div class="right-box"> | ||||||
|         <y-table |         <y-table | ||||||
|           v-if="selectViewInfo.type === 'table'" |           v-if="selectViewInfo.type === 'table'" | ||||||
|  |           :previewId="selectedRowId" | ||||||
|           :filter-config="selectViewInfo.filter" |           :filter-config="selectViewInfo.filter" | ||||||
|           :data-list="selectViewInfo.data" |           :data-list="selectViewInfo.data" | ||||||
|           :column-config="selectViewInfo.header" |           :column-config="selectViewInfo.header" | ||||||
| @ -83,10 +84,6 @@ | |||||||
|             (params) => { |             (params) => { | ||||||
|               toGetViewInfo(params); |               toGetViewInfo(params); | ||||||
|             }" |             }" | ||||||
|           @toExport=" |  | ||||||
|             (params) => { |  | ||||||
|               toExport(params) |  | ||||||
|             }" |  | ||||||
|         /> |         /> | ||||||
|         <y-chart v-else-if="selectViewInfo.type === 'chart'" :chartCfg="selectViewInfo.config" :title="selectViewInfo.preview_name" :filter-config="selectViewInfo.filter" @toFilt="toGetViewInfo" /> |         <y-chart v-else-if="selectViewInfo.type === 'chart'" :chartCfg="selectViewInfo.config" :title="selectViewInfo.preview_name" :filter-config="selectViewInfo.filter" @toFilt="toGetViewInfo" /> | ||||||
|         <div class="preview-area" v-else> |         <div class="preview-area" v-else> | ||||||
| @ -101,7 +98,6 @@ | |||||||
| <script setup> | <script setup> | ||||||
| import { onMounted, ref, reactive } from "vue"; | import { onMounted, ref, reactive } from "vue"; | ||||||
| import { getProModular, getViewList, getViewInfo, deleteView } from "./service"; | import { getProModular, getViewList, getViewInfo, deleteView } from "./service"; | ||||||
| import { exportTable } from "@/api/preview/index"; |  | ||||||
| import { viewListCols } from "./config"; | import { viewListCols } from "./config"; | ||||||
| import yTable from "@/components/common/y-table.vue"; | import yTable from "@/components/common/y-table.vue"; | ||||||
| import { message } from "ant-design-vue"; | import { message } from "ant-design-vue"; | ||||||
| @ -159,15 +155,6 @@ const toGetViewInfo = (params = {}) => { | |||||||
|   }); |   }); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const toExport = (params = {}) => { |  | ||||||
|   exportTable({ |  | ||||||
|     previewId: selectedRowId.value, |  | ||||||
|     ...params, |  | ||||||
|   }).then(() => { |  | ||||||
|     message.success("导出成功"); |  | ||||||
|   }); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| const onProjectChange = (val) => { | const onProjectChange = (val) => { | ||||||
|   modularSel.value = projectSel.value.find((item) => item.value === val).child; |   modularSel.value = projectSel.value.find((item) => item.value === val).child; | ||||||
|   modularId.value = null; |   modularId.value = null; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 sy2084
						sy2084