request->isAjax()) { $get = $this->request->get(); // 构建查询条件 $where = []; if (!empty($get['keyword'])) { $where[] = ['oid|invoice_id', 'like', '%' . $get['keyword'] . '%']; } if (isset($get['state']) && $get['state'] !== '') { $where[] = ['state', '=', intval($get['state'])]; } // 查询数据(关联订单表获取订单编号) $list = Db::name('invoice_log') ->where($where) ->order('state asc') ->select(); // 格式化数据 $currentDomain = $_SERVER['HTTP_HOST']; $result = []; foreach ($list as $item) { $result[] = [ 'id' => $item['id'] ?? 0, 'invoice_id' => $item['invoice_id'] ?? 0, 'oid' => $item['oid'] ?? 0, 'state' => $item['state'] ?? 1, 'document' => "http://".$currentDomain."/public/".$item['document'] ?? '', 'create_time' => $item['create_time'] ?? '', 'update_time' => $item['update_time'] ?? '', ]; } $data = [ 'count' => count($result), 'lists' => $result ]; $this->_success('', $data); } return $this->fetch(); } /** * 查看详情 */ public function info() { $id = $this->request->param('id', 0); if (empty($id)) { $this->_error('参数错误'); } $invoice = InvoiceLog::with([ "order" => function ($query) { $query->field('id, order_sn'); }, "invoice" => function ($query) { $query->with('user'); }, ]) ->where('id', $id) ->find(); if (empty($invoice)) { $this->_error('数据不存在'); } // 处理文件路径(转换为完整URL) $currentDomain = $_SERVER['HTTP_HOST']; if (!empty($invoice['document'])) { $invoice['document_url'] = "http://".$currentDomain."/public/".$invoice['document']; } $this->assign([ 'invoice' => $invoice, ]); return $this->fetch(); } /** * 上传 */ public function edit() { $id = $this->request->param('id', 0); if (empty($id)) { $this->_error('参数错误'); } if ($this->request->isAjax() && $this->request->isPost()) { $post = $this->request->post(); // 表单验证 if (empty($post['invoice_id'])) { $this->_error('请输入发票信息ID'); } if (empty($post['document'])){ $this->_error('请上传发票文件'); } $data = [ 'state' => $post['state'], 'document' => $post['document'], 'update_time' => date('Y-m-d H:i:s', time()), ]; // 更新数据 $result = Db::name('invoice_log')->where('id', $id)->update($data); if ($result) { $this->_success('上传成功'); } else { $this->_error('上传失败'); } } // 查询订单列表 $orders = Db::name('order') ->where('order_status', '>', 0) ->field('id, order_sn') ->order('id desc') ->limit(100) ->select(); $invoice = InvoiceLog::with(['invoice'])->where('id',$id)->find(); // 处理文件路径(转换为完整URL用于显示) if (!empty($invoice['document'])) { $currentDomain = $_SERVER['HTTP_HOST']; $invoice['document'] = 'http://'.$currentDomain.'/public/'.$invoice['document']; } $this->assign([ 'invoice' => $invoice, 'orders' => $orders, ]); return $this->fetch(); } /** * 删除 */ public function del() { if ($this->request->isAjax() && $this->request->isPost()) { $id = $this->request->post('id', 0); if (empty($id)) { $this->_error('参数错误'); } // 检查数据是否存在 $invoice = Db::name('invoice_log')->where('id', $id)->find(); if (empty($invoice)) { $this->_error('数据不存在'); } // 删除数据 $result = Db::name('invoice_log')->where('id', $id)->delete(); if ($result) { $this->_success('删除成功'); } else { $this->_error('删除失败'); } } else { $this->_error('请求方式错误'); } } /** * 上传发票文件 */ public function upload() { if ($this->request->isPost()) { $file = $this->request->file('file'); if (empty($file)) { $this->_error('请选择文件'); } // 获取文件信息 $fileInfo = $file->getInfo(); $fileName = $fileInfo['name'] ?? ''; // 验证文件类型(PDF)- 从文件名获取扩展名(最可靠的方法) $ext = ''; if (!empty($fileName)) { // 使用pathinfo获取扩展名,支持中文文件名 $ext = strtolower(pathinfo($fileName, PATHINFO_EXTENSION)); } // 如果从文件名获取失败,尝试从MIME类型判断 if (empty($ext) && isset($fileInfo['type'])) { $mimeType = strtolower($fileInfo['type']); if (strpos($mimeType, 'pdf') !== false || $mimeType === 'application/pdf') { $ext = 'pdf'; } } // 验证扩展名 if (empty($ext) || $ext !== 'pdf') { $this->_error('只支持PDF格式文件,当前文件:' . $fileName . ',扩展名:' . ($ext ?: '未知')); } // 设置验证规则 $file->validate(['ext' => 'pdf']); // 上传文件 $uploadPath = rtrim(ROOT_PATH, '/\\') . '/public/uploads/invoice'; $info = $file->move($uploadPath); if ($info) { // 返回文件路径(相对路径) $filePath = 'uploads/invoice/' . $info->getSaveName(); $this->_success('上传成功', ['path' => $filePath]); } else { $errorMsg = $file->getError(); $this->_error('上传失败:' . ($errorMsg ?: '未知错误')); } } else { $this->_error('请求方式错误'); } } }