front/scripts/generate-order-template.js
2026-03-06 18:37:07 +08:00

62 lines
2.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 生成订单批量下单标准模板 Excel
* 基于 /api/order/parcel/create 接口结构
* 运行: node scripts/generate-order-template.js
*/
import * as XLSX from 'xlsx'
import { fileURLToPath } from 'url'
import { dirname, join } from 'path'
import { mkdirSync, existsSync } from 'fs'
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
// 表头:订单+件重尺+发件人+收件人+申报明细(单条)
const headers = [
// 订单信息 t_order
['客户单号', '跟踪号', '运单号', '产品代码', '渠道代码', '货物属性', '仓库ID', '客户ID', '是否COD', 'COD币种', 'COD金额'],
// 件重尺 t_order_weight
['长(cm)', '宽(cm)', '高(cm)', '实重(kg)', '体积重(kg)', '计费重(kg)', '立方(m³)'],
// 发件人 t_order_sender
['发件人姓名', '发件人公司', '发件人手机', '发件人电话', '发件人邮箱', '发件人国家', '发件人省州', '发件人城市', '发件人邮编', '发件人地址1', '发件人地址2', '发件人地址3', '发件人门牌号'],
// 收件人 t_order_recipient
['收件人姓名', '收件人公司', '收件人手机', '收件人电话', '收件人邮箱', '收件人国家', '收件人省州', '收件人城市', '收件人门牌号', '收件人地址1', '收件人地址2', '收件人地址3', '收件人邮编', '税号类型', '税号', '证件类型', '证件号码', 'EORI', 'VAT'],
// 申报明细 t_order_declaration(首条)
['品名-中', '品名-英', 'SKU', '单位', '单价', '单重(kg)', '数量', '总金额', '总重量(kg)', 'HS编码', '图片URL', '类别', '品牌', '品牌类型', '是否带磁带电', '配货信息', '材质', '英文材质', '用途', '属性', '原产国', '销售链接', '型号', '规格', '备注'],
].flat()
// 示例行(空值,供用户填写)
const exampleRow = headers.map(() => '')
// 说明行
const noteRow = ['请勿修改表头,按列填写数据。货物属性填:普货、3c&带电、敏感货。多件申报时,同一订单可多行,订单/发件人/收件人信息重复填写。']
function generateTemplate() {
const wb = XLSX.utils.book_new()
const wsData = [
noteRow,
headers,
exampleRow,
exampleRow,
]
const ws = XLSX.utils.aoa_to_sheet(wsData)
// 列宽
ws['!cols'] = headers.map((_, i) => ({ wch: Math.min(18, Math.max(10, (headers[i] || '').length + 2)) }))
// 冻结首行和表头行
ws['!freeze'] = { xSplit: 0, ySplit: 2, topLeftCell: 'A3', state: 'frozen' }
XLSX.utils.book_append_sheet(wb, ws, '批量下单模板')
const outDir = join(__dirname, '../public/templates')
if (!existsSync(outDir)) {
mkdirSync(outDir, { recursive: true })
}
const outPath = join(outDir, 'order-standard-template.xlsx')
XLSX.writeFile(wb, outPath)
console.log('Generated:', outPath)
}
generateTemplate()