Vue+PHP后台实现导出Excel表格,要有自定义(选择字段)和筛选功能

要求:订单管理导出excel表格要有自定义(选择字段)和筛选功能。

PHP代码

/**
     * @title 订单Excel内容生成
     * @description 订单Excel内容生成
     * @author 
     * @url /order/order/get_Excel
     * @method *
     * @param name:token require:1 default: desc:token
     * @list    id:id    out_trade_no:订单编号    product_id:产品id    price:价格    is_coupon:是否使用优惠券    coupon_id:优惠券id    pay_price:实际支付价格    is_pay:是否支付    pay_time:支付时间    pay_type:支付类型    pay_status:订单状态    order_status:订单状态    create_time:创建时间    user_id:用户id    title:订单标题    order_type:订单类型    contacts:联系人    phone:手机号    email:邮箱    remark:备注    travel_start:出行开始日期    travel_end:出行结束日期    success_time:完成时间    product_type:产品类型
     * @return error_id:1-10-01-0006 校验失败
     */
    public function get_Excel()
    {
        $message = input();
        $data = array();
        /*dump($message[0]['header']);
        exit();*/
        foreach ($message[0]['header'] as $k => $v) {
            $data['key'][] = $k;
            $data['value'][] = $v;
        }
        $field = implode(',',$data['key']);
        /*dump($field);
                exit();*/
        $where = array();
        foreach ($message[1]['data'] as $key => $value) {
            if ($key == 'limit' || $key == 'page') {
                unset($value);
                continue;
            }
            if ($value === 0) {
                continue;
            }
            /*if (empty($value)) {
                unset($value);
            }*/
            if ($key == 'create_time' || $key == 'pay_time' || $key == 'travel_start' || $key == 'travel_end') {
                if (!empty($value[0]) && !empty($value[1])) {
                    $start = strtotime($value[0]);
                    $end = strtotime($value[1]);
                    unset($value);
                    $where[] = [$key, '>=', $start];
                    $where[] = [$key, '<=', $end];
                }
            }
            if ($key =='id'||$key =='out_trade_no'||$key =='phone'||$key =='coupon_id'||$key =='is_pay'||$key =='pay_type'||$key =='pay_status'||$key =='order_status'||$key=='is_coupon'||$key=='product_type'){
                $where[] = [$key, '=', $value];
            }
        }



        $data['list'] = Db::name('order')
            ->where($where)
            ->withAttr('pay_time', function ($value, $data) {
                if (!empty($data['pay_time'])){
                    return date('Y-m-d H:i:s', $data['pay_time']);
                }
            })
            ->withAttr('create_time', function ($value, $data) {
                if (!empty($data['create_time'])){
                    return date('Y-m-d H:i:s', $data['create_time']);
                }
            })
            ->withAttr('create_time', function ($value, $data) {
                if (!empty($data['create_time'])){
                    return date('Y-m-d H:i:s', $data['create_time']);
                }
            })
            ->withAttr('travel_start', function ($value, $data) {
                if (!empty($data['travel_start'])){
                    return date('Y-m-d H:i:s', $data['travel_start']);
                }
            })
            ->withAttr('travel_end', function ($value, $data) {
                if (!empty($data['travel_end'])){
                    return date('Y-m-d H:i:s', $data['travel_end']);
                }
            })
            ->withAttr('success_time', function ($value, $data) {
                if (!empty($data['success_time'])){
                    return date('Y-m-d H:i:s', $data['success_time']);
                }
            })
            ->field($field)
            ->order('id desc')->select();
        foreach ($data['list'] as $k => $v) {
            foreach ($v as $key => $value) {
                if ($key === 'user_id') {
                    if (empty($v[$key])) {
                        $data['list'][$k][$key] = '用户不存在';
                    } elseif (!empty(get_curl('user', '/user/info', ['token' => $message['token'], 'id' => $v[$key]])['data']['nickname'])) {
                        $data['list'][$k][$key] = get_curl('user', '/user/info', ['token' => $message['token'], 'id' => $v[$key]])['data']['nickname'];
                    } else {
                        $data['list'][$k][$key] = '用户不存在';
                    }
                }
                if ($key === 'product_id') {
                    if (empty($v[$key])) {
                        $data['list'][$k][$key] = '产品名称不健全';
                    } elseif (!empty(get_curl('product', '/product/info', ['token' => $message['token'], 'id' => $v[$key]])['data']['title'])) {
                        $data['list'][$k][$key] = get_curl('product', '/product/info', ['token' => $message['token'], 'id' => $v[$key]])['data']['title'];
                    } else {
                        $data['list'][$k][$key] = '产品名称不健全';
                    }
                }
                if ($key === 'is_coupon') {
                    if (empty($v[$key])) {
                        $data['list'][$k][$key] = '未知';
                    } elseif ($v[$key] === 1) {
                        $data['list'][$k][$key] = '是';
                    } else {
                        $data['list'][$k][$key] = '否';
                    }
                }
                if ($key === 'is_pay') {
                    if (empty($v[$key])) {
                        $data['list'][$k][$key] = '未知';
                    } elseif ($v[$key] === 1) {
                        $data['list'][$k][$key] = '支付';
                    } else {
                        $data['list'][$k][$key] = '未支付';
                    }
                }
                if ($key === 'pay_type') {
                    if (empty($v[$key])) {
                        $data['list'][$k][$key] = '未知';
                    } elseif ($v[$key] === 'wx_pay') {
                        $data['list'][$k][$key] = '微信支付';
                    } else {
                        $data['list'][$k][$key] = '其他';
                    }
                }
                if ($key === 'pay_status') {
                    if (empty($v[$key])) {
                        $data['list'][$k][$key] = '未知';
                    } elseif ($v[$key] === 'paid') {
                        $data['list'][$k][$key] = '支付';
                    } else {
                        $data['list'][$k][$key] = '未支付';
                    }
                }
//订单状态'refunded: 已退款','refunding: 退款中','cancel'已取消,'success'已完成,'wait_evaluate'待评价,'wait_travel'待出行,'obligation'待付款
                if ($key === 'order_status') {
                    switch ($v[$key]){
                        case 'refunded':$data['list'][$k][$key] = '已退款'; break;
                        case 'refunding':$data['list'][$k][$key] = '退款中'; break;
                        case 'cancel':$data['list'][$k][$key] = '已取消'; break;
                        case 'success':$data['list'][$k][$key] = '已完成'; break;
                        case 'wait_evaluate':$data['list'][$k][$key] = '待评价'; break;
                        case 'wait_travel':$data['list'][$k][$key] = '待出行'; break;
                        case 'obligation':$data['list'][$k][$key] = '待付款'; break;
                        default :$data['list'][$k][$key] = '未知';
                    }
                }

                if ($key === 'product_type') {
                    if (empty($v[$key])) {
                        $data['list'][$k][$key] = '未知';
                    } elseif ($v[$key] === 'social') {
                        $data['list'][$k][$key] = '约玩';
                    } elseif ($v[$key] === 'product') {
                        $data['list'][$k][$key] = '产品';
                    } else {
                        $data['list'][$k][$key] = '其他';
                    }
                }
            }
        }
        /*dump($data['list']);
        exit();*/
        $msg['list'] = $data;
        return $this->successJson($msg);
    }

Vue代码

DownloadExcel() {
  this.downloadLoading = true
  
  var formThead = this.formThead;
  for (var i in formThead) {
    if (formThead[i] == false){
      delete(formThead[i]);
    }
  }
  for (var e in formThead) {
    switch (e) {
      case  'id': formThead[e]='id'; break;
      case  'out_trade_no':formThead[e]= '订单编号';break;
      case  'product_id':formThead[e]= '产品id';break;
      case  'price':formThead[e]='价格';break;
      case  'is_coupon':formThead[e]= '是否使用优惠券';break;
      case  'coupon_id':formThead[e]= '优惠券id';break;
      case  'pay_price':formThead[e]= '实际支付价格';break;
      case  'is_pay':formThead[e]= '是否支付';break;
      case  'pay_time':formThead[e]= '支付时间';break;
      case  'pay_type':formThead[e]= '支付类型';break;
      case  'pay_status':formThead[e]= '支付状态';break;
      case  'order_status':formThead[e]= '订单状态';break;
      case  'create_time':formThead[e]= '创建时间';break;
      case  'user_id':formThead[e]= '用户姓名';break;
      case  'title':formThead[e]= '订单标题';break;
      case  'contacts':formThead[e]= '联系人';break;
      case  'phone':formThead[e]= '手机号码';break;
      case  'email':formThead[e]= '邮箱';break;
      case  'remark':formThead[e]= '备注';break;
      case  'travel_start':formThead[e]= '出行时间';break;
      case  'travel_end': formThead[e]='出行结束时间';break;
      case  'success_time':formThead[e]= '完成时间';break;
      case 'product_type':formThead[e]= '产品类型';break;
      case 'nickname':delete(formThead[e]);break;
      case 'product':delete (formThead[e]);break;
    }

  }
  console.log(formThead)
  getExcel(store.getters.token, [{ header: formThead }, { data: this.listQuery }]).then(response => {
      import('@/vendor/Export2Excel').then(excel => {
        // console.log(response.data.list.value)
        const tHeader = response.data.list.value
        const filterVal = response.data.list.key
        const list = response.data.list.list
        const data = this.formatJson(filterVal, list)
        excel.export_json_to_excel({
          header: tHeader,
          data,
          filename: 'order_list',
          autoWidth: true,
          bookType: 'xlsx'
        })
        this.downloadLoading = false
      })
  }).catch(() => {
    this.getLists()
    this.$message({
      type: 'info',
      message: '失败!'
    })
  })
},
formatJson(filterVal, jsonData) {
  return jsonData.map(v => filterVal.map(j => {
    if (j === 'timestamp') {
      return parseTime(v[j])
    } else {
      return v[j]
    }
  }))
}

订单数据

listQuery: {
  case: undefined,
  id: undefined,
  out_trade_no: undefined,
  product_id: undefined,
  product: undefined,
  price: undefined,
  is_coupon: undefined,
  coupon_id: undefined,
  pay_price: undefined,
  is_pay: undefined,
  pay_time: undefined,
  pay_type: undefined,
  pay_status: undefined,
  order_status: undefined,
  create_time: undefined,
  user_id: undefined,
  nickname: undefined,
  title: undefined,
  contacts: undefined,
  phone: undefined,
  email: undefined,
  remark: undefined,
  travel_start: undefined,
  travel_end: undefined,
  success_time: undefined,
  product_type: undefined,
  is_delete: undefined,
  is_tickets: undefined,
  tickets_buy_status: undefined,
  is_cate: undefined,
  cate_issue_status: undefined,
  page: 1,
  limit: 10
},

Vue+PHP后台实现导出Excel表格,要有自定义(选择字段)和筛选功能

Vue+PHP后台实现导出Excel表格,要有自定义(选择字段)和筛选功能