From d1cb52d4077e86cf90c984fac9035fe66e5452cd Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期一, 10 五月 2021 16:27:42 +0800 Subject: [PATCH] 2021-05-10 --- src/tabviews/zshare/actionList/exceloutbutton/index.jsx | 170 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 128 insertions(+), 42 deletions(-) diff --git a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx index ea6c15d..40d904c 100644 --- a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx +++ b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx @@ -430,63 +430,149 @@ const { btn } = this.props try { - let _header = [] - let _topRow = {} - let colwidth = [] - let abses = [] + let imgCol = btn.verify.columns.filter(col => col.type === 'image')[0] - btn.verify.columns.forEach(col => { - if (_topRow[col.Column]) return - - _header.push(col.Column) - _topRow[col.Column] = col.Text - - if (col.abs === 'true') { - abses.push(col.Column) - } - - colwidth.push({width: col.Width || 20}) - }) - - let table = [] - - table.push(_topRow) - - data && data.forEach((item, index) => { - let _row = {} - - item.$Index = index + 1 - - _header.forEach(field => { - if (item[field] && abses.includes(field)) { - _row[field] = Math.abs(item[field]) - } else { - _row[field] = item[field] + if (imgCol) { + const column = btn.verify.columns.map(item => { + let col = { + title: item.Text, + key: item.Column, + type: 'text', + width: (item.Width || 20) * 10 } + if (item.type === 'image') { + col.type = 'image' + col.height = col.width + } + return col }) - table.push(_row) - }) + let table = [] - const ws = XLSX.utils.json_to_sheet(table, {header: _header, skipHeader: true}) + data && data.forEach((item, index) => { + let _row = {} + + item.$Index = index + 1 + + btn.verify.columns.forEach((col, i) => { + if (item[col.Column] && col.abs === 'true') { + _row[col.Column] = Math.abs(item[col.Column]) + } else { + _row[col.Column] = item[col.Column] + } + }) + + table.push(_row) + }) - ws['!cols'] = colwidth + this.table2excel(column, table, this.state.excelName.replace(/\.xlsx/ig, '.xls')) - const wb = XLSX.utils.book_new() - XLSX.utils.book_append_sheet(wb, ws, 'Sheet1') + if (btn.verify && btn.verify.enable === 'true' && btn.verify.script) { + this.execCustomScript() + } else { + this.execSuccess({ErrCode: 'S', ErrMesg: '瀵煎嚭鎴愬姛锛�'}) + } - XLSX.writeFile(wb, this.state.excelName) - - if (btn.verify && btn.verify.enable === 'true' && btn.verify.script) { - this.execCustomScript() } else { - this.execSuccess({ErrCode: 'S', ErrMesg: '瀵煎嚭鎴愬姛锛�'}) + let _header = [] + let _topRow = {} + let colwidth = [] + let abses = [] + + btn.verify.columns.forEach(col => { + if (_topRow[col.Column]) return + + _header.push(col.Column) + _topRow[col.Column] = col.Text + + if (col.abs === 'true') { + abses.push(col.Column) + } + + colwidth.push({width: col.Width || 20}) + }) + + let table = [] + + table.push(_topRow) + + data && data.forEach((item, index) => { + let _row = {} + + item.$Index = index + 1 + + _header.forEach(field => { + if (item[field] && abses.includes(field)) { + _row[field] = Math.abs(item[field]) + } else { + _row[field] = item[field] + } + }) + + table.push(_row) + }) + + const ws = XLSX.utils.json_to_sheet(table, {header: _header, skipHeader: true}) + + ws['!cols'] = colwidth + + const wb = XLSX.utils.book_new() + XLSX.utils.book_append_sheet(wb, ws, 'Sheet1') + + XLSX.writeFile(wb, this.state.excelName) + + if (btn.verify && btn.verify.enable === 'true' && btn.verify.script) { + this.execCustomScript() + } else { + this.execSuccess({ErrCode: 'S', ErrMesg: '瀵煎嚭鎴愬姛锛�'}) + } } } catch { this.execError({ErrCode: 'N', message: 'Excel鐢熸垚澶辫触锛�'}) } } + table2excel = (column, data, excelName) => { + let thead = column.reduce((result, item) => { + return result + `<th>${item.title}</th>` + }, '') + + thead = `<thead><tr>${thead}</tr></thead>` + + let tbody = data.reduce((result, row) => { + const temp = column.reduce((tds, col) => { + let cell = '<td></td>' + if (col.type !== 'image' || !row[col.key]) { + cell = `<td style="width: ${col.width}px;">${row[col.key]}</td>` + } else if (col.type === 'image') { + cell = `<td style="width: ${col.width}px;height: ${col.height}px;"><img src="${row[col.key]}" width="${col.width * 0.75}"></td>` + } + return tds + cell + }, '') + return result + `<tr>${temp}</tr>` + }, '') + + tbody = `<tbody>${tbody}</tbody>` + + const table = thead + tbody + + let html = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>" + html += '<head><meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">' + html += '<xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>Sheet1</x:Name><x:WorksheetOptions><x:Print><x:ValidPrinterInfo/></x:Print></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml></head>' + html += `<body><table>${table}</table></body>` + html += '</html>' + + let url = 'data:application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(html) + // let url = 'data:application/vnd.ms-excel;base64,' + window.btoa(unescape(encodeURIComponent(html))) + let link = document.createElement('a') + link.href = url + link.download = excelName + document.body.appendChild(link) + link.click() + document.body.removeChild(link) + } + + /** * @description 鎵ц鑷畾涔夎剼鏈� */ -- Gitblit v1.8.0