Compare commits
2 Commits
7dd6d4cf53
...
b9ced5e520
Author | SHA1 | Date |
---|---|---|
|
b9ced5e520 | 3 weeks ago |
|
20f896632f | 1 month ago |
10 changed files with 256 additions and 24 deletions
@ -1,2 +1,2 @@ |
|||||||
VITE_BASE_URL = 'http://192.168.1.3:48080' |
VITE_BASE_URL = 'http://192.168.1.3:48081' |
||||||
VITE_SOCKET_SERVER = 'http://192.168.1.3:48080' |
VITE_SOCKET_SERVER = 'http://192.168.1.3:48081' |
||||||
|
@ -0,0 +1,188 @@ |
|||||||
|
<template> |
||||||
|
<EdfsDialog |
||||||
|
@on-close="onClone" |
||||||
|
@on-save="onSave" |
||||||
|
title="上传Markdown文件" |
||||||
|
:is-show="isShow" |
||||||
|
:btn-loading="loading" |
||||||
|
width="44%" |
||||||
|
class="upload-MD-dlg" |
||||||
|
> |
||||||
|
<div class="dlg-body"> |
||||||
|
<el-upload |
||||||
|
v-model:fileList="fileList" |
||||||
|
drag |
||||||
|
action="" |
||||||
|
accept=".md" |
||||||
|
:limit="1" |
||||||
|
:on-exceed="handleExceed" |
||||||
|
:auto-upload="false" |
||||||
|
ref="upload" |
||||||
|
class="upload-container" |
||||||
|
> |
||||||
|
<el-icon class="upload-icon"> |
||||||
|
<IEpUploadFilled /> |
||||||
|
</el-icon> |
||||||
|
<div class="text">拖拽文件或者 <em>点击上传</em></div> |
||||||
|
<template #tip v-if="!fileList.length"> |
||||||
|
<div class="el-upload__tip">上传限制一个文件,新文件会覆盖旧文件</div> |
||||||
|
</template> |
||||||
|
</el-upload> |
||||||
|
</div> |
||||||
|
</EdfsDialog> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script setup lang="ts"> |
||||||
|
import EdfsDialog from '@/components/dashboard/Edfs-dialog.vue' |
||||||
|
import type { |
||||||
|
UploadInstance, |
||||||
|
UploadProps, |
||||||
|
UploadRawFile, |
||||||
|
UploadUserFile, |
||||||
|
} from 'element-plus' |
||||||
|
import { useMessage } from '@/hooks/useMessage.js' |
||||||
|
|
||||||
|
const message = useMessage() |
||||||
|
|
||||||
|
interface Props { |
||||||
|
isShow: boolean |
||||||
|
} |
||||||
|
|
||||||
|
const emits = defineEmits(['on-save', 'on-close']) |
||||||
|
const props = withDefaults(defineProps<Props>(), { |
||||||
|
isShow: false, |
||||||
|
}) |
||||||
|
|
||||||
|
const fileList = ref<UploadUserFile[]>([]) |
||||||
|
const fileName = ref('') |
||||||
|
const fileContent = ref('') |
||||||
|
|
||||||
|
const upload = ref<UploadInstance>() |
||||||
|
const handleExceed: UploadProps['onExceed'] = files => { |
||||||
|
upload.value!.clearFiles() |
||||||
|
const file = files[0] as UploadRawFile |
||||||
|
|
||||||
|
upload.value!.handleStart(file) |
||||||
|
} |
||||||
|
|
||||||
|
function readFileContent( |
||||||
|
file: UploadUserFile |
||||||
|
): Promise<{ type: string; message: string }> { |
||||||
|
const fileData = file.raw as File |
||||||
|
fileName.value = fileData.name |
||||||
|
|
||||||
|
return new Promise((resolve, reject) => { |
||||||
|
const reader = new FileReader() |
||||||
|
reader.onload = e => { |
||||||
|
if (e.target) { |
||||||
|
resolve({ |
||||||
|
type: 'success', |
||||||
|
message: e.target?.result as string, |
||||||
|
}) |
||||||
|
} |
||||||
|
} |
||||||
|
reader.onerror = () => { |
||||||
|
reject({ |
||||||
|
type: 'error', |
||||||
|
message: '文件读取失败', |
||||||
|
}) |
||||||
|
} |
||||||
|
reader.readAsText(fileData) // 读取文件 |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
function validate() { |
||||||
|
if (!fileList.value.length) { |
||||||
|
message.error('请上传文件') |
||||||
|
return true |
||||||
|
} |
||||||
|
return false |
||||||
|
} |
||||||
|
const loading = ref(false) |
||||||
|
async function onSave() { |
||||||
|
if (validate()) return |
||||||
|
// 限制上传文件大小 |
||||||
|
|
||||||
|
loading.value = true |
||||||
|
const res = await readFileContent(fileList.value[0]) |
||||||
|
loading.value = false |
||||||
|
|
||||||
|
if (res.type === 'error') { |
||||||
|
message.error(res.message) |
||||||
|
return |
||||||
|
} |
||||||
|
fileContent.value = res.message |
||||||
|
emits('on-save', fileName.value, fileContent.value) |
||||||
|
onClone() |
||||||
|
} |
||||||
|
|
||||||
|
function clearData() { |
||||||
|
fileName.value = '' |
||||||
|
fileContent.value = '' |
||||||
|
fileList.value = [] |
||||||
|
} |
||||||
|
function onClone() { |
||||||
|
clearData() |
||||||
|
emits('on-close') |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped lang="scss"> |
||||||
|
.upload-MD-dlg { |
||||||
|
.el-row { |
||||||
|
height: 32px; |
||||||
|
margin-bottom: 20px; |
||||||
|
:deep(.label) { |
||||||
|
margin-right: 10px; |
||||||
|
} |
||||||
|
|
||||||
|
span { |
||||||
|
width: 110px; |
||||||
|
height: 32px; |
||||||
|
line-height: 32px; |
||||||
|
text-align: right; |
||||||
|
} |
||||||
|
:deep(.el-radio-group) { |
||||||
|
height: 100%; |
||||||
|
} |
||||||
|
:deep(.el-radio) { |
||||||
|
height: 100%; |
||||||
|
} |
||||||
|
} |
||||||
|
.require { |
||||||
|
color: red; |
||||||
|
margin-right: 4px; |
||||||
|
} |
||||||
|
.upload { |
||||||
|
height: 156px; |
||||||
|
:deep(.upload-container) { |
||||||
|
width: calc(100% - 210px); |
||||||
|
height: calc(100% - 20px); |
||||||
|
} |
||||||
|
:deep(.el-upload) { |
||||||
|
height: 100%; |
||||||
|
width: 100%; |
||||||
|
} |
||||||
|
:deep(.el-upload-dragger) { |
||||||
|
height: 100%; |
||||||
|
width: 100%; |
||||||
|
padding-top: 30px; |
||||||
|
box-sizing: border-box; |
||||||
|
} |
||||||
|
|
||||||
|
.upload-icon { |
||||||
|
font-size: 54px; |
||||||
|
color: #c0c4cc; |
||||||
|
} |
||||||
|
.text { |
||||||
|
color: #6c6c6c; |
||||||
|
font-size: 14px; |
||||||
|
text-align: center; |
||||||
|
} |
||||||
|
em { |
||||||
|
color: #409eff; |
||||||
|
cursor: pointer; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
Loading…
Reference in new issue