diff --git a/src/api/links.js b/src/api/links.js index 80397b8..cee8111 100644 --- a/src/api/links.js +++ b/src/api/links.js @@ -18,4 +18,8 @@ export function updateLink(id, payload) { return http.patch(`/api/link/${id}`, payload) } +export function batchDeleteLinks(codeNos) { + return http.post('/api/link/batch-delete', { codeNos }) +} + diff --git a/src/config/links.js b/src/config/links.js index 897201c..ca728ce 100644 --- a/src/config/links.js +++ b/src/config/links.js @@ -19,38 +19,40 @@ export const LINK_CONFIG = { // 状态配置 export const STATUS_CONFIG = { - // 状态标签类型 + // 状态标签类型映射 LABEL_TYPES: { - NORMAL: 'success', // 正常 - EXPIRING: 'warning', // 即将过期 - EXPIRED: 'danger', // 已过期 - UNKNOWN: 'info' // 未知 + NEW: 'success', // 新建 + USED: 'info', // 已使用 + EXPIRED: 'danger', // 已过期 + UNKNOWN: 'info' // 未知 }, - // 状态文本 + // 状态文本映射 LABEL_TEXTS: { - NORMAL: '正常', - EXPIRING: '即将过期', + NEW: '新建', + USED: '已使用', EXPIRED: '已过期', UNKNOWN: '未知' }, - // 过期时间阈值(毫秒) - EXPIRING_THRESHOLD: 24 * 60 * 60 * 1000, // 24小时 + // 过期警告阈值(秒) + EXPIRING_THRESHOLD: 24 * 60 * 60, // 24小时 } // 导出配置 export const EXPORT_CONFIG = { // CSV文件前缀 - FILE_PREFIX: 'links', + FILE_PREFIX: 'redemption_codes', // 默认列配置 DEFAULT_COLUMNS: [ + { key: 'codeNo', label: '兑换码' }, { key: 'batchId', label: '批次ID' }, - { key: 'codeNos', label: '机器编号' }, - { key: 'deductPoints', label: '扣除积分' }, + { key: 'quantity', label: '数量' }, + { key: 'times', label: '次数' }, + { key: 'totalPoints', label: '总积分' }, + { key: 'statusDesc', label: '状态' }, { key: 'expireAt', label: '过期时间' }, - { key: 'status', label: '状态' }, { key: 'createdAt', label: '创建时间' } ] } diff --git a/src/utils/links.js b/src/utils/links.js index 4cc6ae5..c61579f 100644 --- a/src/utils/links.js +++ b/src/utils/links.js @@ -74,7 +74,7 @@ export async function copyToClipboard(text) { // 导出CSV数据 export function exportToCSV(data, headers, filename) { const csvContent = [ - headers.join(','), + headers.map(h => h.label).join(','), ...data.map(row => headers.map(header => { const value = row[header.key] || '' @@ -91,4 +91,46 @@ export function exportToCSV(data, headers, filename) { link.click() } +// 导出Excel数据 +export function exportToExcel(data, headers, filename) { + // 创建HTML表格格式 + const tableHTML = ` + + + + + + + + + + ${headers.map(header => ``).join('')} + + + + ${data.map(row => + ` + ${headers.map(header => ``).join('')} + ` + ).join('')} + +
${header.label}
${row[header.key] || ''}
+ + + ` + + // 创建Blob并下载 + const blob = new Blob([tableHTML], { + type: 'application/vnd.ms-excel;charset=utf-8;' + }) + const link = document.createElement('a') + link.href = URL.createObjectURL(blob) + link.download = filename + link.click() +} + diff --git a/src/views/links/LinkGenerate.vue b/src/views/links/LinkGenerate.vue index 95125fb..7e2159f 100644 --- a/src/views/links/LinkGenerate.vue +++ b/src/views/links/LinkGenerate.vue @@ -75,36 +75,81 @@ > 导出CSV + + +
+ + 全选 + + + 取消选择 + + + 批量复制链接 ({{ selectedRows.length }}) + + + 导出选中Excel + + + 批量删除 ({{ selectedRows.length }}) + +
+ + - + - + + + + @@ -115,46 +160,44 @@ + + + @@ -169,7 +212,7 @@ 删除 @@ -222,10 +265,10 @@