逻辑编排前端

CustomImport.vue 3.6KB

    <template> <div class="demo"> <div class="form-item"> <div class="form-title"> <h5>模板下载:</h5> </div> <span class="download" @click.stop="downTemplate">global_template</span> </div> <div class="form-item"> <div class="form-title"> <h5>文件导入:</h5> </div> <el-upload size="small" action accept=".xlsx, .xls" :auto-upload="false" :show-file-list="false" :on-change="useExcelHooks" > <el-button type="success">文件导入</el-button> </el-upload> </div> <common-table class="global-table" :table-header="tableHeader" :table-data="tableData" ></common-table> </div> </template> <script setup lang="ts"> import { ref } from 'vue'; import XLSX from 'xlsx'; import { downloadTemplaye } from '../../../../api/flow'; function downTemplate() { window.open(downloadTemplaye()); } const tableHeader = ref([ { label: '属性名称', name: 'name', 'min-width': '150' }, { label: '属性ID', name: 'id', 'min-width': '150' }, { label: '属性类型', name: 'type', 'min-width': '150' } ]); // excel表数据处理 const tableData = ref([]); function useExcelHooks(e: any) { const result = ref([]); // 文件读取 function readFile(file: any) { return new Promise((resolve) => { const reader = new FileReader(); reader.readAsBinaryString(file); reader.onload = (e) => { resolve(e.target.result); }; }); } function parseTableData(data: any) { tableData.value = []; if (Array.isArray(data) && data.length) { let el = {}; data.forEach((item) => { el = { id: item.id, isValidate: item.isValidate || '', name: item.name || '', type: item.type || '', validateRules: { equal: item.equal || '', less: item.less || '', max: item.max || '', min: item.min || '', more: item.more || '', nullable: item.nullable || false, precision: item.precision || '', scale: item.scale || '', unequal: item.unequal || '' } }; tableData.value.push(el); }); } } // function unique(arr: any) { // const res = new Map(); // return arr.filter( // (a: any) => // !res.has(a.id) && // res.set(a.id, 1) && // !res.has(a.name) && // res.set(a.name, 1) // ); // } // excel转json function excelToJson() { const file = e.raw; readFile(file) .then((data) => { const workbook = XLSX.read(data, { type: 'binary' }); // 解析二进制格式数据 console.log(workbook); const worksheet = workbook.Sheets[workbook.SheetNames[0]]; // 获取第一个Sheet console.log(worksheet); result.value = XLSX.utils.sheet_to_json(worksheet); // json数据格式 parseTableData(result.value); console.log(result.value); }) .finally(() => { // props.table[props.activeName].data = unique([ // ...props.table[props.activeName].data, // ...tableData.value // ]); return tableData.value; }); } excelToJson(); } defineExpose({ tableData }); </script> <style scoped lang="scss"> .form-item { display: flex; align-items: center; .form-title { display: flex; justify-content: space-between; align-items: center; margin: 10px 20px; h5 { font-size: 14px; color: rgba(0, 0, 0, 0.65); } } .download { text-decoration: underline; } } </style>