From 137fb8ea6af2789b3238b22bac31d80bced41dfe Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期三, 28 七月 2021 11:39:39 +0800 Subject: [PATCH] 2021-07-28 --- src/tabviews/zshare/actionList/exceloutbutton/index.jsx | 195 ++++++++++++++++++++++++++++++++++-------------- 1 files changed, 136 insertions(+), 59 deletions(-) diff --git a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx index 121fc6f..2bd9686 100644 --- a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx +++ b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx @@ -42,7 +42,7 @@ if (position === 'toolbar') { MKEmitter.addListener('triggerBtnId', this.actionTrigger) } - MKEmitter.addListener('execExcelout', this.triggerExcelout) + MKEmitter.addListener('returnModuleParam', this.triggerExcelout) } componentWillUnmount () { @@ -50,7 +50,7 @@ return } MKEmitter.removeListener('triggerBtnId', this.actionTrigger) - MKEmitter.removeListener('execExcelout', this.triggerExcelout) + MKEmitter.removeListener('returnModuleParam', this.triggerExcelout) } /** @@ -78,7 +78,7 @@ if ((triggerId && btn.uuid !== triggerId) || loading) return - if (Tab && Tab.supMenu && !BID) { + if (((Tab && Tab.supMenu) || setting.supModule) && !BID) { notification.warning({ top: 92, message: '闇�瑕佷笂绾т富閿�硷紒', @@ -110,7 +110,7 @@ return } - MKEmitter.emit('getexceloutparam', btn.$menuId, btn.uuid) + MKEmitter.emit('queryModuleParam', btn.$menuId, btn.uuid) if (window.GLOB.systemType === 'production') { MKEmitter.emit('queryTrigger', {menuId: btn.uuid, name: '瀵煎嚭Excel'}) } @@ -130,9 +130,7 @@ if (btn.search === 'true' && viewParam.search && viewParam.search.length > 0) { let valid = false viewParam.search.forEach(item => { - if (Array.isArray(item.value) && item.value.length > 0) { - valid = true - } else if (item.value || item.value === 0) { + if (item.value || item.value === 0) { valid = true } }) @@ -430,31 +428,77 @@ 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 + 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 + }) - _header.push(col.Column) - _topRow[col.Column] = col.Text + let table = [] - if (col.abs === 'true') { - abses.push(col.Column) + 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) + }) + + this.table2excel(column, table, this.state.excelName.replace(/\.xlsx/ig, '.xls')) + + if (btn.verify && btn.verify.enable === 'true' && btn.verify.script) { + this.execCustomScript() + } else { + this.execSuccess({ErrCode: 'S', ErrMesg: '瀵煎嚭鎴愬姛锛�'}) } - colwidth.push({width: col.Width || 20}) - }) - - let table = [] - - table.push(_topRow) - - if (data && abses.length > 0) { - data.forEach(item => { + } else { + 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]) @@ -465,35 +509,67 @@ table.push(_row) }) - } else if (data) { - data.forEach(item => { - let _row = {} - _header.forEach(field => { - _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: '瀵煎嚭鎴愬姛锛�'}) + 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 鎵ц鑷畾涔夎剼鏈� @@ -606,20 +682,21 @@ if (this.props.BID) { param.BID = this.props.BID } + + let userName = sessionStorage.getItem('User_Name') || '' + let fullName = sessionStorage.getItem('Full_Name') || '' + let city = sessionStorage.getItem('city') || '' + + if (sessionStorage.getItem('isEditState') === 'true') { + userName = sessionStorage.getItem('CloudUserName') || '' + fullName = sessionStorage.getItem('CloudFullName') || '' + } let _dataresource = setting.dataresource let regoptions = null if (setting.queryType === 'statistics' || param.custom_script) { let allSearch = Utils.getAllSearchOptions(search) - let userName = sessionStorage.getItem('User_Name') || '' - let fullName = sessionStorage.getItem('Full_Name') || '' - let city = sessionStorage.getItem('city') || '' - - if (sessionStorage.getItem('isEditState') === 'true') { - userName = sessionStorage.getItem('CloudUserName') || '' - fullName = sessionStorage.getItem('CloudFullName') || '' - } regoptions = allSearch.map(item => { return { @@ -665,7 +742,7 @@ } if (param.custom_script) { - param.custom_script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000) select @ErrorCode='',@retmsg ='' + param.custom_script = `declare @ErrorCode nvarchar(50),@retmsg nvarchar(4000),@UserName nvarchar(50),@FullName nvarchar(50),@login_city nvarchar(50) select @ErrorCode='',@retmsg ='',@UserName='${userName}', @FullName='${fullName}', @login_city='${city}' ${param.custom_script} ` regoptions.forEach(item => { @@ -798,7 +875,7 @@ type="link" title={show === 'icon' ? btn.label : ''} loading={loading} - style={btn.btnstyle} + style={btn.style} icon={show === 'text' ? '' : (show === 'icon' ? (btn.icon || 'download') : (btn.icon || ''))} onClick={(e) => {e.stopPropagation(); this.actionTrigger()}} >{show === 'icon' ? '' : btn.label}</Button> -- Gitblit v1.8.0