| | |
| | | <a :href="fileUrl">下载文件</a> |
| | | </div> |
| | | <div v-if="isCsv"> |
| | | <p>CSV 文件无法直接预览,请下载查看。</p> |
| | | <a :href="fileUrl">下载文件</a> |
| | | <div id="teacherPaperAnswer"></div> |
| | | <p v-if="csvList.length==0">CSV 文件无法直接预览,请下载查看。</p> |
| | | <a :href="fileUrl" v-if="csvList.length==0">下载文件</a> |
| | | <el-tabs type="border-card" v-if="csvList.length>0" tab-position="bottom"> |
| | | <el-tab-pane :label="item.sheetName" v-for="(item,index) in csvList" :key="index"> |
| | | <el-table :data="item.tableData" height="75vh"> |
| | | <el-table-column :label="m.label" :prop="m.prop" v-for="(m,i) in item.column" :key="i" min-width="120px" show-overflow-tooltip> |
| | | <template slot-scope="scope" slot="header"> |
| | | <div> |
| | | <el-tooltip :content="m.label" placement="top"> |
| | | <div class="oneLine"> |
| | | <span>{{m.label}}</span> |
| | | </div> |
| | | </el-tooltip> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | | <div v-if="!isSupported"> |
| | | <p>不支持的文件格式</p> |
| | |
| | | import VueOfficeExcel from '@vue-office/excel' |
| | | //引入相关样式 |
| | | import '@vue-office/excel/lib/index.css' |
| | | import Papa from 'papaparse'; |
| | | import jschardet from 'jschardet' |
| | | export default { |
| | | components: { |
| | | VueOfficeDocx, |
| | |
| | | beforeTransformData: (workbookData) => {return workbookData}, //底层通过exceljs获取excel文件内容,通过该钩子函数,可以对获取的excel文件内容进行修改,比如某个单元格的数据显示不正确,可以在此自行修改每个单元格的value值。 |
| | | transformData: (workbookData) => {return workbookData}, //将获取到的excel数据进行处理之后且渲染到页面之前,可通过transformData对即将渲染的数据及样式进行修改,此时每个单元格的text值就是即将渲染到页面上的内容 |
| | | }, |
| | | csvList:[],//csv文件数据 |
| | | } |
| | | }, |
| | | computed: { |
| | |
| | | this.$axios.post(this.$api.insOrderPlan.preview, { |
| | | id: this.currentFile.id, |
| | | }).then( res => { |
| | | console.log(res.data) |
| | | let arr = res.data |
| | | arr = arr.map(m=>{ |
| | | let obj = { |
| | | sheetName:m.sheetName, |
| | | tableData:[], |
| | | column:[] |
| | | } |
| | | obj.tableData = this.formatCSVToTable(m.content.replaceAll('null',' ')) |
| | | for (let item in obj.tableData[0]) { |
| | | obj.column.push({ |
| | | label: item, |
| | | prop: item, |
| | | }) |
| | | } |
| | | return obj |
| | | }) |
| | | this.csvList = arr |
| | | console.log(4444,this.csvList) |
| | | }).catch( err => { |
| | | console.log(err) |
| | | }) |
| | | }, |
| | | async main(){ |
| | | //渲染表格 |
| | | this.paintingTable(criteriaAnswer,"teacherPaperAnswer"); //用id定位渲染目标 |
| | | }, |
| | | paintingTable(File, location) { |
| | | $("#" + location + "").empty(); |
| | | let table = '<table class="table table-bordered" style="zoom:0.8";>'; |
| | | for (let j = 0; j < File.length; j++) { |
| | | if (j == 0) { |
| | | table += '<thead><tr style="white-space: nowrap;"><th scope="col">#</th>'; |
| | | for (let k in File[j]) { |
| | | table += '<th scope="col">' + k + '</th>'; |
| | | formatCSVToTable(str){ |
| | | const result = []; |
| | | const jsonObj = str.split("\n"); |
| | | let arrHeader = []; |
| | | for (const i in jsonObj) { |
| | | if (typeof jsonObj[i] === 'string' && jsonObj[i].length > 0) { |
| | | const row = `${jsonObj[i]}`; |
| | | if (row.trim().length > 0) { |
| | | const kv = jsonObj[i].split(','); |
| | | if (i == 0) { |
| | | // 获取column表头 |
| | | arrHeader = kv; |
| | | } else { |
| | | const obj = {}; |
| | | for (let index = 0; index < arrHeader.length; index++) { |
| | | // 组装表格数据 |
| | | const name = String(arrHeader[index]); |
| | | if (!arrHeader[index]) continue |
| | | if (!obj[name]) { |
| | | try { |
| | | if (kv[index]) { |
| | | obj[name] = String(kv[index]); |
| | | } else { |
| | | obj[name] = ''; |
| | | } |
| | | } catch (err) { |
| | | obj[name] = ''; |
| | | } |
| | | } |
| | | table += '</tr></thead><tbody style="white-space: pre;">'; |
| | | } |
| | | result.push(obj); |
| | | } |
| | | table += '<tr><th scope="row" style="vertical-align: middle;">' + Number(j + 1) + '</th>'; |
| | | for (let k in File[j]) { |
| | | table += '<td style="vertical-align: middle; padding:0 20px; border: inset;background:#FFFFFF;"><div style="text-align:left;">' + File[j][k] + '</div></td>'; |
| | | } |
| | | table += '</tr>'; |
| | | } |
| | | } |
| | | table += '</tbody>'; |
| | | $("#" + location + "").append(table); |
| | | } |
| | | return result |
| | | }, |
| | | } |
| | | } |
| | |
| | | img { |
| | | max-width: 100%; |
| | | } |
| | | |
| | | .oneLine { |
| | | overflow: hidden; |
| | | white-space: nowrap; |
| | | text-overflow: ellipsis; |
| | | } |
| | | </style> |