全部门店开单记录汇总导出接口说明.md
6.28 KB
全部门店开单记录汇总导出接口
接口地址
GET /api/Extend/lqkdkdjlb/billing-record-summary-export-all-stores
接口说明
按照Excel格式导出全部门店的开单记录汇总,每个品项每个健康师一行。如果某个品项有多个健康师,会展开为多行数据。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| StartTime | DateTime | 是 | 开始时间(格式:yyyy-MM-dd 或 yyyy-MM-dd HH |
| EndTime | DateTime | 是 | 结束时间(格式:yyyy-MM-dd 或 yyyy-MM-dd HH |
| MemberId | string | 否 | 客户ID(会员ID),筛选指定客户 |
| ItemCategory | string | 否 | 品项分类,筛选指定分类 |
| ItemId | string | 否 | 品项ID,筛选指定品项 |
| HealthCoachId | string | 否 | 健康师ID,筛选指定健康师 |
请求示例
基础请求(仅时间范围)
// Axios 示例
axios.get('/api/Extend/lqkdkdjlb/billing-record-summary-export-all-stores', {
params: {
StartTime: '2026-01-01',
EndTime: '2026-01-31'
},
headers: {
'Authorization': 'Bearer ' + token
},
responseType: 'blob' // 重要:设置为 blob 以接收文件
}).then(response => {
// 创建下载链接
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', '开单记录汇总.xls');
document.body.appendChild(link);
link.click();
link.remove();
});
完整请求(包含筛选条件)
axios.get('/api/Extend/lqkdkdjlb/billing-record-summary-export-all-stores', {
params: {
StartTime: '2026-01-01',
EndTime: '2026-01-31',
MemberId: '123456789', // 可选
ItemCategory: '分类名称', // 可选
ItemId: '987654321', // 可选
HealthCoachId: '111222333' // 可选
},
headers: {
'Authorization': 'Bearer ' + token
},
responseType: 'blob'
}).then(response => {
// 处理文件下载
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', '开单记录汇总.xls');
document.body.appendChild(link);
link.click();
link.remove();
});
响应格式
成功响应(200)
{
"code": 200,
"msg": "操作成功",
"data": {
"name": "开单记录汇总_2026-01-22_152816.xls",
"url": "/api/File/Download?encryption=..."
}
}
错误响应(400/500)
{
"code": 400,
"msg": "开始时间和结束时间不能为空"
}
Excel 列说明
导出的Excel文件包含以下列(按顺序):
- 开单日期 - 开单记录的日期
- 单据门店 - 开单门店的中文名称
- 客户姓名 - 客户姓名
- 客户电话 - 客户电话
- 金三角 - 金三角信息
- 客户类型 - 客户类型
- 健康师 - 健康师姓名
- 业绩金额 - 健康师业绩金额(格式:¥0.00)
- 相关品项 - 品项名称
- 分类 - 品项分类
- 类型 - 品项类型(购买/体验/赠送等)
- 单价 - 品项单价(格式:¥0.00)
- 次数 - 项目次数
- 品项金额 - 品项总金额(格式:¥0.00)
- 已付金额 - 已付金额(格式:¥0.00)
- 欠款金额 - 欠款金额(格式:¥0.00)
- 总金额 - 总金额(格式:¥0.00)
- 支付方式 - 支付方式
- 合作机构 - 合作机构名称
- 结算机构 - 结算机构名称
- 活动名称 - 活动名称
- 备注 - 备注信息
- 开单时间 - 开单时间(格式:yyyy/MM/dd HH
ss)
数据展开规则
- 如果一个开单记录有多个品项,每个品项一行
- 如果一个品项有多个健康师,每个健康师一行
- 如果一个品项没有健康师,健康师相关字段显示"无",业绩金额显示"¥0.00"
注意事项
- 时间格式:建议使用
yyyy-MM-dd格式,系统会自动处理时间范围 - 文件下载:前端需要设置
responseType: 'blob'来接收文件 - 文件格式:导出文件为
.xls格式(Excel 97-2003) - 数据量:如果数据量很大,导出可能需要较长时间,建议前端显示加载提示
- 权限:需要登录并携带有效的 Authorization token
Vue 2 + Element UI 完整示例
<template>
<div>
<el-button
type="primary"
:loading="exporting"
@click="handleExport"
>
导出全部门店开单记录汇总
</el-button>
</div>
</template>
<script>
import { exportBillingRecordSummaryAllStores } from '@/api/billing'
export default {
data() {
return {
exporting: false,
queryParams: {
StartTime: '2026-01-01',
EndTime: '2026-01-31'
}
}
},
methods: {
async handleExport() {
try {
this.exporting = true
this.$message.info('正在导出,请稍候...')
const response = await exportBillingRecordSummaryAllStores(this.queryParams)
if (response.code === 200 && response.data) {
// 使用返回的下载URL
const downloadUrl = this.$store.getters.baseUrl + response.data.url
window.open(downloadUrl, '_blank')
this.$message.success('导出成功')
} else {
this.$message.error(response.msg || '导出失败')
}
} catch (error) {
console.error('导出失败:', error)
this.$message.error('导出失败,请稍后重试')
} finally {
this.exporting = false
}
}
}
}
</script>
API 封装示例(api/billing.js)
import request from '@/utils/request'
/**
* 导出全部门店开单记录汇总
* @param {Object} params 查询参数
* @param {string} params.StartTime 开始时间
* @param {string} params.EndTime 结束时间
* @param {string} [params.MemberId] 客户ID
* @param {string} [params.ItemCategory] 品项分类
* @param {string} [params.ItemId] 品项ID
* @param {string} [params.HealthCoachId] 健康师ID
* @returns {Promise}
*/
export function exportBillingRecordSummaryAllStores(params) {
return request({
url: '/api/Extend/lqkdkdjlb/billing-record-summary-export-all-stores',
method: 'get',
params: params
})
}