index.vue 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <template>
  2. <div>
  3. <el-button type="primary" size="small" @click="submit()" plain>导 出</el-button>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. props:['tablecols','param','excelTitle','total','specialKey'],
  9. data () {
  10. return {}
  11. },
  12. methods:{
  13. async submit () {
  14. let data = {}
  15. // 如果传入了total,需要赋值保证数量准确性
  16. // data = Object.assign({},data,this.param)
  17. data = JSON.parse(JSON.stringify(this.param))
  18. if (this.total) {
  19. data.content.pageSize = this.total
  20. }
  21. data.content.isAll = false
  22. const res = await this.$api.requested(data)
  23. if (this.specialKey) {
  24. res.data.forEach(e=>{
  25. this.specialKey.forEach(s=>{
  26. e[s.key] = e[s.key]? e[s.key]:[]
  27. e[s.key] = e[s.key].map(k=>{return s.value?k[s.value]:k}).toString()
  28. })
  29. })
  30. }
  31. let table = JSON.parse(JSON.stringify(this.tablecols))
  32. table.forEach((e,index) => {
  33. // 由于表格数据结构问题这里需要判断一下
  34. if (e.title === '省市县') {
  35. table[index].title = '省'
  36. table.splice(index + 1,0,{title:'市',columnname:'city'},{title:'县',columnname:'county'})
  37. }else if(e.title === '标签'){
  38. res.data.forEach(e => {
  39. if (e.tag.length !== 0){
  40. e.tag_sys = e.tag_sys + ',' + e.tag
  41. }else {
  42. e.tag_sys = e.tag_sys
  43. }
  44. })
  45. }else if(e.title === '项目类型'){
  46. res.data.forEach(e => {
  47. e.projecttype = e.projecttype + '-' + e.projecttype_remarks
  48. })
  49. } else if (e.title === '授权角色') {
  50. res.data.forEach(e => {
  51. e.roleName = e.userrole.map(item => item.remarks).join(',')
  52. })
  53. console.log(res.data,'结果');
  54. }
  55. });
  56. let hd = table.map(e=>{
  57. return e.title
  58. })
  59. let ft = table.map(e=>{
  60. return e.columnname
  61. })
  62. this.tool.exportExcel(hd,ft,res.data,this.excelTitle)
  63. }
  64. }
  65. }
  66. </script>
  67. <style>
  68. </style>