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 +++++++++++++++++++++++++-------- src/templates/sharecomponent/actioncomponent/verifyexcelout/columnform/index.jsx | 14 +- src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx | 60 ++++++------ 3 files changed, 165 insertions(+), 79 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 鎵ц鑷畾涔夎剼鏈� */ diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/columnform/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/columnform/index.jsx index 90f6b83..d050d57 100644 --- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/columnform/index.jsx +++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/columnform/index.jsx @@ -1,6 +1,6 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' -import { Form, Row, Col, Button, Input, InputNumber } from 'antd' +import { Form, Row, Col, Button, Input, InputNumber, Radio } from 'antd' import './index.scss' class ExcelOutColumn extends Component { @@ -40,7 +40,7 @@ return ( <Form {...formItemLayout} className="verify-form"> <Row gutter={24}> - <Col span={7}> + <Col span={5}> <Form.Item label={dict['model.form.field']}> {getFieldDecorator('Column', { initialValue: '', @@ -53,7 +53,7 @@ })(<Input placeholder="" autoComplete="off" />)} </Form.Item> </Col> - <Col span={7}> + <Col span={5}> <Form.Item label={dict['model.name']}> {getFieldDecorator('Text', { initialValue: '', @@ -66,7 +66,7 @@ })(<Input placeholder="" autoComplete="off" />)} </Form.Item> </Col> - <Col span={7}> + <Col span={5}> <Form.Item label={dict['model.form.columnWidth']}> {getFieldDecorator('Width', { initialValue: 20, @@ -79,7 +79,7 @@ })(<InputNumber min={5} max={200} precision={0} />)} </Form.Item> </Col> - {/* <Col span={5}> + <Col span={5}> <Form.Item label="绫诲瀷"> {getFieldDecorator('type', { initialValue: 'text' @@ -90,8 +90,8 @@ </Radio.Group> )} </Form.Item> - </Col> */} - <Col span={3} className="add"> + </Col> + <Col span={4} className="add"> <Button onClick={this.handleConfirm} type="primary" className="mk-green"> 娣诲姞 </Button> diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx index 06c042c..6a0f7b9 100644 --- a/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx +++ b/src/templates/sharecomponent/actioncomponent/verifyexcelout/index.jsx @@ -33,14 +33,14 @@ inputType: 'input', editable: true, unique: true, - width: '25%' + width: '20%' }, { title: this.props.dict['model.name'], dataIndex: 'Text', inputType: 'input', editable: true, - width: '25%' + width: '20%' }, { title: this.props.dict['model.form.columnWidth'], @@ -49,34 +49,34 @@ min: 5, max: 200, editable: true, - width: '25%' + width: '20%' }, - // { - // title: '绫诲瀷', - // dataIndex: 'type', - // inputType: 'select', - // editable: true, - // required: false, - // width: '20%', - // render: (text) => { - // if (text === 'image') { - // return '鍥剧墖' - // } else { - // return '鏂囨湰' - // } - // }, - // options: [ - // {value: 'text', text: '鏂囨湰'}, - // {value: 'image', text: '鍥剧墖'} - // ] - // }, + { + title: '绫诲瀷', + dataIndex: 'type', + inputType: 'select', + editable: true, + required: false, + width: '20%', + render: (text) => { + if (text === 'image') { + return '鍥剧墖' + } else { + return '鏂囨湰' + } + }, + options: [ + {value: 'text', text: '鏂囨湰'}, + {value: 'image', text: '鍥剧墖'} + ] + }, { title: '鍙栫粷瀵瑰��', dataIndex: 'abs', inputType: 'select', editable: true, required: false, - width: '25%', + width: '20%', render: (text) => { if (text === 'true') { return '鏄�' @@ -106,12 +106,12 @@ if (card.intertype !== 'system') { _verify.enable = 'false' } - // if (_verify.columns[0] && !_verify.columns[0].type) { - // _verify.columns = _verify.columns.map(col => { - // col.type = col.type || 'text' - // return col - // }) - // } + if (_verify.columns[0] && !_verify.columns[0].type) { + _verify.columns = _verify.columns.map(col => { + col.type = col.type || 'text' + return col + }) + } let defaultscript = '' if (!_verify.script && card.intertype === 'system') { @@ -395,7 +395,7 @@ Text: item.label, Width: 20, abs: 'false', - // type: 'text', + type: 'text', uuid: Utils.getuuid() }) }) -- Gitblit v1.8.0