exportComponent.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <!--
  2. @name: exportComponent
  3. @description: 通用导出组件
  4. @author: zc
  5. @time: 2023/11/30
  6. @引入:
  7. <el-form-item v-hasPermiRouter="['system:user:export']">
  8. <export-component :exportConfig="exportConfig"></export-component>
  9. </el-form-item>
  10. import exportComponent from "@/components/exportComponent/exportComponent.vue";
  11. components: {
  12. exportComponent,
  13. },
  14. exportConfig:{
  15. api:'system/user/student/export', //导出接口地址
  16. ids:'', //勾选导出,勾选的IDS
  17. fileName:'导出文件名', //导出文件的命名
  18. customKey:null, //自定义参数KEY(非必填)
  19. customValue:null, //自定义参数VALUE(非必填)
  20. screenData:{} //导出筛选数据(非必要-如有该参数组件会显示导出筛选数据按钮)
  21. },
  22. -->
  23. <template>
  24. <el-dropdown @command="exportButton">
  25. <div class="exportComponent">
  26. <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAddJREFUOE+dk71rU2EYxX/n3qTDpa1FEge/EcHJ/8FNEARbUCh0qaKg4CJSsGqb3DSDHQQXF0U3PwadROjfIIirIA6iKNhiSTUmuTf3SHKLtLZB8Vne5X1+73ue5xwRt6eELiGOACavAPPOIRe4PvQGLKqtYwqCO0AZVACF2O+luPMaeaetJeRvmBAU4OwLnewR9ehTH1nxQcJkHHxU1jhiDFiTap1VwxPSJEZRg+ay+g1RqQu0qChbBwQU2EeWXJE0Ce49lPUAK8b36A7FVNRcl7D1mPduCsmM4IThJfYOSSd7gGXjB6w1aiyW17YFLHgPdGeVdScsPSVNb1MonhaezgH2Q7434m0B895LIZkVTFjBM5KwTpXP1NqH6PrAYIAt6q39OLwmdMr4OSrWuaF8qP2yBgNmPMJwelXinPEL0nSBavTxT4mDAbc8QjuZRiqRJvepRh9+N1ccwI9dBMXyYEDvkhnmJ2ZRm4dbcUTYviiCM38f4nZryX8X9+T9H2Dm6wijo3Oyzv67kTb+pC+hMyd0PreyeEyS1DZZeZAlo5Jxc5Ri8abMZA/wCrtkaQm8up7EPA9bdtZPawYak30caUXE6ZSUXQYOb4jzwEjk/kGIt7bv/gIDxhB8p301WQAAAABJRU5ErkJggg==">
  27. <p>导出</p>
  28. <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAQAAABQ+cdNAAAAAXNSR0IArs4c6QAAAFxJREFUCNdFiLENwCAQxH4SqEDMlCJiB/QHzAINJTOxQNJDnaCAlHNzNrHyB1s+N3aaIg5ofONazNc4UNRcMPBsBpeoichJJPQvdSQnac0L5Bk6shf0zxlUVGeWvWfOMytyOTQwAAAAAElFTkSuQmCC">
  29. </div>
  30. <el-dropdown-menu slot="dropdown">
  31. <el-dropdown-item style="border-bottom:1px solid #E0E0E0;margin:0 10px;color:#333;" :command="{command:1}">导出全部数据</el-dropdown-item>
  32. <el-dropdown-item style="border-bottom:1px solid #E0E0E0;margin:0 10px;color:#333;" :command="{command:3}" v-if="exportConfig.screenData">导出筛选数据</el-dropdown-item>
  33. <el-dropdown-item style="margin:0 10px;color:#333;" :command="{command:2}">导出选中数据</el-dropdown-item>
  34. </el-dropdown-menu>
  35. </el-dropdown>
  36. </template>
  37. <script>
  38. export default {
  39. name: 'exportComponent',
  40. props: {
  41. exportConfig:{},
  42. },
  43. data () {
  44. return {
  45. }
  46. },
  47. created(){
  48. },
  49. mounted(){
  50. },
  51. methods:{
  52. /** 导出按钮操作 */
  53. exportButton(item) {
  54. let self = this;
  55. let currentDate=this.getCurrentTime()
  56. if(item.command == 1){
  57. self.$confirm(`确认导出全部数据?`, "提示", {
  58. confirmButtonText: "确定",
  59. cancelButtonText: "取消",
  60. type: "warning"
  61. }).then(async () => {
  62. let obj = {
  63. ids :''
  64. }
  65. if(self.exportConfig.customKey){
  66. obj[self.exportConfig.customKey] = self.exportConfig.customValue
  67. }
  68. self.download(self.exportConfig.api,obj, self.exportConfig.fileName+currentDate+'.xlsx')
  69. if(self.$parent.$refs['table-box']){
  70. self.$parent.$refs['table-box'].clearSelection();
  71. }else if(self.$parent.$parent.$refs['table-box']){
  72. self.$parent.$parent.$refs['table-box'].clearSelection();
  73. }else if(self.$parent.$parent.$parent.$refs['table-box']){
  74. self.$parent.$parent.$parent.$refs['table-box'].clearSelection();
  75. }
  76. }).catch(() => {})
  77. }else if(item.command == 2){
  78. if(self.exportConfig.ids.length>0) {
  79. self.$confirm(`确认导出选中数据?`, "提示", {
  80. confirmButtonText: "确定",
  81. cancelButtonText: "取消",
  82. type: "warning"
  83. }).then(async () => {
  84. let ids = self.exportConfig.ids.join(',');
  85. let obj = {
  86. ids :ids
  87. }
  88. if(self.exportConfig.customKey){
  89. obj[self.exportConfig.customKey] = self.exportConfig.customValue
  90. }
  91. self.download(self.exportConfig.api,obj, self.exportConfig.fileName+currentDate+'.xlsx')
  92. if(self.$parent.$refs['table-box']){
  93. self.$parent.$refs['table-box'].clearSelection();
  94. }else if(self.$parent.$parent.$refs['table-box']){
  95. self.$parent.$parent.$refs['table-box'].clearSelection();
  96. }else if(self.$parent.$parent.$parent.$refs['table-box']){
  97. self.$parent.$parent.$parent.$refs['table-box'].clearSelection();
  98. }
  99. }).catch(() => {})
  100. }else{
  101. this.msgError('请勾选数据')
  102. }
  103. }else if(item.command == 3){
  104. self.$confirm(`确认导出当前筛选条件查出的数据?`, "提示", {
  105. confirmButtonText: "确定",
  106. cancelButtonText: "取消",
  107. type: "warning"
  108. }).then(async () => {
  109. self.download(self.exportConfig.api,self.exportConfig.screenData, self.exportConfig.fileName+currentDate+'.xlsx')
  110. if(self.$parent.$refs['table-box']){
  111. self.$parent.$refs['table-box'].clearSelection();
  112. }else if(self.$parent.$parent.$refs['table-box']){
  113. self.$parent.$parent.$refs['table-box'].clearSelection();
  114. }else if(self.$parent.$parent.$parent.$refs['table-box']){
  115. self.$parent.$parent.$parent.$refs['table-box'].clearSelection();
  116. }
  117. }).catch(() => {})
  118. }
  119. },
  120. /** 当前时间 */
  121. getCurrentTime () {
  122. const yy = new Date().getFullYear()
  123. const mm = new Date().getMonth() + 1
  124. const dd = new Date().getDate()
  125. return yy + '-' + mm + '-' + dd
  126. },
  127. },
  128. }
  129. </script>
  130. <style scoped lang="scss">
  131. .exportComponent{
  132. display: flex;
  133. margin:0;
  134. padding:0 10px;
  135. cursor: pointer;
  136. height:40px;
  137. img:nth-child(1){
  138. width:16px;
  139. height:16px;
  140. margin-top:12px;
  141. }
  142. p{
  143. width:47px;
  144. text-align: center;
  145. font-size:14px;
  146. margin:0;
  147. line-height:40px;
  148. }
  149. img:nth-child(3){
  150. width:10px;
  151. height:6px;
  152. margin-top:17px;
  153. }
  154. }
  155. </style>