2 changed files with 113 additions and 1 deletions
@ -0,0 +1,97 @@ |
|||||
|
<script lang="ts" setup> |
||||
|
|
||||
|
import { ElDialog } from 'element-plus'; |
||||
|
|
||||
|
const props = withDefaults(defineProps<{ |
||||
|
fields:any[], |
||||
|
formId:string, |
||||
|
commitFunc:()=>void, |
||||
|
closeFunc:()=>void, //父级只需销毁组件 |
||||
|
}>(),{}) |
||||
|
|
||||
|
//主表字段 |
||||
|
const uploadURL=import.meta.env.VITE_APP_BASE_API+"/systemapi/task_management/import_form_list" |
||||
|
const checkList=ref<string[]>([]) |
||||
|
const uploadFormData = computed(() => { |
||||
|
return { |
||||
|
formId: props.formId, // 用户的uuid |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
onMounted(()=>{ |
||||
|
props.fields.forEach((val)=>{ |
||||
|
if (val.item && val.name!=="id"){ |
||||
|
checkList.value.push(val.name) |
||||
|
} |
||||
|
}) |
||||
|
}) |
||||
|
|
||||
|
//上传失败 |
||||
|
function handleSigLoadErr(error: Error, uploadFile: UploadFile, uploadFiles:UploadFiles){ |
||||
|
ElMessage.error("导入失败") |
||||
|
} |
||||
|
|
||||
|
function onDownloadTemplate(){ |
||||
|
//标题行 |
||||
|
const arr:string[]=[] |
||||
|
props.fields.forEach((val)=>{ |
||||
|
if(checkList.value.includes(val.name)){ |
||||
|
arr.push(`"(${val.name})\n${val.item.label}"`) |
||||
|
} |
||||
|
}) |
||||
|
const filename= "导入模板.csv" |
||||
|
const csvString = arr.join(','); |
||||
|
const blob = new Blob([csvString], { type: "text/csv;charset=utf-8;" }); |
||||
|
const link = document.createElement("a"); |
||||
|
if (link.download !== undefined) { // feature detection |
||||
|
// Browsers that support HTML5 download attribute |
||||
|
const url = URL.createObjectURL(blob); |
||||
|
link.setAttribute("href", url); |
||||
|
link.setAttribute("download", filename); |
||||
|
link.style.visibility = "hidden"; |
||||
|
document.body.appendChild(link); |
||||
|
link.click(); |
||||
|
document.body.removeChild(link); |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<template> |
||||
|
<el-dialog :model-value="true" :style="{height: '60%',width:'60%'}" @close="props.closeFunc"> |
||||
|
<h3>请选择导入的字段</h3> |
||||
|
<div style="display: flex; flex-direction:column;width: 80%; height: 50%;margin-top: 20px;"> |
||||
|
<el-checkbox-group v-model="checkList"> |
||||
|
<template v-for="vals in props.fields"> |
||||
|
<el-checkbox v-if="vals.item && vals.name!=='id'" :key="vals.name" :value="vals.name" > |
||||
|
{{ vals.item.label }} |
||||
|
</el-checkbox> |
||||
|
</template> |
||||
|
</el-checkbox-group> |
||||
|
</div> |
||||
|
<div style="width: 80%;margin: 20px;"> |
||||
|
* 请下载<a @click="onDownloadTemplate"> 导入模板</a>,不要修改模板的首行标题行。 |
||||
|
</div> |
||||
|
<el-upload class="el-button el-button--default" |
||||
|
:data="uploadFormData" |
||||
|
accept=".csv,.xls,.xlsx,.XLS,.XLSX" |
||||
|
:on-error="handleSigLoadErr" |
||||
|
:on-success="commitFunc" |
||||
|
:action="uploadURL" :limit="1"> |
||||
|
<span>导入</span> |
||||
|
</el-upload> |
||||
|
</el-dialog> |
||||
|
</template> |
||||
|
<style> |
||||
|
/* dialog的body内容样式设置*/ |
||||
|
.el-dialog__body{ |
||||
|
height: 96%; |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
align-items: center; |
||||
|
} |
||||
|
.el-dialog{ |
||||
|
/* 让整个弹出窗口位置更高一些*/ |
||||
|
--el-dialog-margin-top:7vh; |
||||
|
} |
||||
|
|
||||
|
</style> |
||||
Loading…
Reference in new issue