UNPKG

bin-ui

Version:

基于 vue2.6 / vue-cli3 的 UI 组件库

60 lines (54 loc) 1.55 kB
/* inspired by https://www.npmjs.com/package/react-csv-downloader now removed from Github */ const newLine = '\r\n' const appendLine = (content, row, { separator, quoted }) => { const line = row.map(data => { if (!quoted) return data // quote data data = typeof data === 'string' ? data.replace(/"/g, '"') : data return `"${data}"` }) content.push(line.join(separator)) } const defaults = { separator: ',', quoted: false } export default function csv(columns, datas, options, noHeader = false) { options = Object.assign({}, defaults, options) let columnOrder const content = [] const column = [] if (columns) { columnOrder = columns.map(v => { if (typeof v === 'string') return v if (!noHeader) { column.push(typeof v.title !== 'undefined' ? v.title : v.key) } return v.key }) if (column.length > 0) appendLine(content, column, options) } else { columnOrder = [] datas.forEach(v => { if (!Array.isArray(v)) { columnOrder = columnOrder.concat(Object.keys(v)) } }) if (columnOrder.length > 0) { columnOrder = columnOrder.filter((value, index, self) => self.indexOf(value) === index) if (!noHeader) appendLine(content, columnOrder, options) } } if (Array.isArray(datas)) { datas.forEach(row => { if (!Array.isArray(row)) { row = columnOrder.map(k => (typeof row[k] !== 'undefined' ? row[k] : '')) } appendLine(content, row, options) }) } return content.join(newLine) }