<?php
namespace App\Admin\Controllers;
use App\Models\Category;
use App\Command\Tools;
use App\Command\Log;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Layout\Row;
use Dcat\Admin\Tree;
use Dcat\Admin\Http\Controllers\AdminController;
use NwVVVS\AdapaySdk\AdapayTools;
class HfBillDownController extends AdminController
{
public function index(Content $content)
{
return $content->header('对账单下载')
->description('csv')
->body(function (Row $row) {
// 移除表单创建逻辑
// 这里可以添加你想要展示的内容,例如文本信息---
//$row->column(12, '<p>这是对账单下载页面,请选择合适的操作。</p>');
// 添加时间选择控件和按钮
$row->column(3, '<input type="date" class="form-control" id="download-date" />');
$row->column(6, '<button id="download-button" class="btn btn-primary">下载</button>');
$row->column(12, '<div><br></div>');
$row->column(12, '<div>下载文件为zip压缩包,解压后获取csv类型的文件,编码格式为UTF-8,若使用Excel打开可能会出现乱码,解决方案请参考 <a href="https://jingyan.baidu.com/article/7082dc1c359cbbe40a89bd3e.html" target="_blank" rel="noopener">Excel打开CSV文件</a> :</p></div>');
$row->column(12, '<p>Charge开头的文件为支付对账单,参考 <a href="https://cdn.cloudpnr.com/adapayresource/documents/Adapay%20Charge%E5%AF%B9%E8%B4%A6%E5%8D%95%E6%A8%A1%E7%89%88.csv" target="_blank" rel="noopener">支付对账单模版</a></p>');
$row->column(12, '<p>Refund开头的文件为退款对账单,参考 <a href="https://cdn.cloudpnr.com/adapayresource/documents/Adapay%20Refund%E5%AF%B9%E8%B4%A6%E5%8D%95%E6%A8%A1%E7%89%88.csv" target="_blank" rel="noopener">退款对账单模版</a></p>');
$row->column(12, '<p>PaymentConfirm开头的文件为支付确认对账单,参考 <a href="https://cdn.cloudpnr.com/adapayresource/documents/Adapay%20PaymentConfirm%E5%AF%B9%E8%B4%A6%E5%8D%95%E6%A8%A1%E7%89%88.csv" target="_blank" rel="noopener">支付确认对账单模版</a></p>');
$row->column(12, '<p>Div开头的文件为分账对账单,参考 <a href="https://cloudpnrcdn.oss-cn-shanghai.aliyuncs.com/adapayresource/Div对账单模版.csv" target="_blank" rel="noopener">分账对账单模版</a></p>');
$row->column(12, '<p>RefundDiv开头的文件为分账退款对账单,参考 <a href="https://cloudpnrcdn.oss-cn-shanghai.aliyuncs.com/adapayresource/RefundDiv对账单模版.csv" target="_blank" rel="noopener">分账退款对账单模版</a></p>');
// 添加 JavaScript 代码绑定点击事件
$row->column(
12,
<<<HTML
<script>
document.getElementById('download-button').addEventListener('click', function() {
var date = document.getElementById('download-date').value;
if (date) {
fetch('/bill-down-download?date=' + date, {
method: 'GET'
})
.then(response => response.json())
.then(data => {
console.log(data);
// 判断 code 是否为 200
if (data.code === 200) {
// 创建一个隐藏的 a 标签
var a = document.createElement('a');
a.href = data.data.url;
a.download = 'downloaded_file.zip'; // 可以根据需要修改文件名
a.style.display = 'none';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
} else {
alert('下载失败:请查看日志 ');
}
});
} else {
alert('请选择日期');
}
});
</script>
HTML
);
});
}
/**
* 处理下载请求
*/
public function download()
{
$date = request()->input('date');
$date = str_replace('-','', $date);
# 初始化对账单下载对象类
$bill = new AdapayTools;
# 对账单下载
$bill->download(strval($date));
//Log::add('billDownloadUrl', $date);
// 检查 $bill->result 是否为数组
if (is_array($bill->result)) {
$responseData = $bill->result;
} else {
$responseData = json_decode($bill->result, true);
}
// 解码第二个元素(是一个JSON字符串)
$resultData = json_decode($responseData[1], true);
// 提取data字段,并解码其中的JSON字符串
$data = json_decode($resultData['data'], true);
// 初始化变量
$billDownloadUrl = '';
// 检查响应数据是否存在且第一个元素是否为 200
if (isset($responseData[0]) && $responseData[0] == 200) {
// 获取bill_download_url的值
$billDownloadUrl = $data['bill_download_url'];
}else{
// 获取error_msg的值
$errorMsg = $data['error_msg'];
return Tools::JsonResponse(['url' => ''], "下载失败,请查看日志:".$errorMsg, 501);
}
if($billDownloadUrl == ''){
Log::add('billDownloadUrl', $responseData);
return Tools::JsonResponse(['url' => $billDownloadUrl], "下载失败,请查看日志", 501);
}
return Tools::JsonResponse(['url' => $billDownloadUrl]);
}
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new Category(), function (Grid $grid) {
$grid->column('id')->sortable();
$grid->column('parent_id');
$grid->column('title');
$grid->column('icon');
$grid->column('order');
$grid->column('show');
$grid->column('created_at');
$grid->column('updated_at')->sortable();
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
});
// 隐藏列表操作按钮
$grid->disableActions();
// 隐藏列表顶部的按钮
$grid->disableCreateButton();
$grid->disableBatchDelete();
$grid->disableExport();
$grid->disableFilterButton();
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new Category(), function (Show $show) {
$show->field('id');
$show->field('parent_id');
$show->field('title');
$show->field('icon');
$show->field('order');
$show->field('show');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new Category(), function (Form $form) {
$form->display('id');
$form->select('parent_id')
->options(Category::selectOptions())
->saving(function ($v) {
return $v ?? 0;
});
$form->text('title');
// $form->image('icon', '分类图标')
// ->accept('jpg,jpeg,png')
// ->maxSize(4096)
// ->url('upload/category')
// ->help('仅支持jpg、jpeg、png格式图片上传(750px * 420px)')
// ->autoUpload();
$form->text('order')->help('越小越靠前');
$form->switch('show', '状态')->default(1);
// $form->display('created_at');
// $form->display('updated_at');
// 隐藏表单底部的按钮
$form->disableResetButton();
$form->disableViewCheck();
$form->disableEditingCheck();
$form->disableCreatingCheck();
// 如果你想隐藏提交按钮,可以使用以下代码
// $form->disableSubmit();
});
}
}