8 changed files with 133 additions and 37 deletions
@ -0,0 +1,72 @@ |
|||
<template> |
|||
<div :class="prefixCls"> |
|||
<Upload |
|||
name="file" |
|||
multiple |
|||
@change="handleChange" |
|||
:action="uploadUrl" |
|||
:showUploadList="false" |
|||
accept=".jpg,.jpeg,.gif,.png,.webp" |
|||
> |
|||
<a-button type="primary">{{ t('component.upload.imgUpload') }}</a-button> |
|||
</Upload> |
|||
</div> |
|||
</template> |
|||
<script lang="ts"> |
|||
import { defineComponent } from 'vue'; |
|||
|
|||
import { Upload } from 'ant-design-vue'; |
|||
import { InboxOutlined } from '@ant-design/icons-vue'; |
|||
import { useDesign } from '/@/hooks/web/useDesign'; |
|||
import { useGlobSetting } from '/@/hooks/setting'; |
|||
import { useI18n } from '/@/hooks/web/useI18n'; |
|||
|
|||
export default defineComponent({ |
|||
name: 'TinymceImageUpload', |
|||
components: { Upload, InboxOutlined }, |
|||
emits: ['uploading', 'done', 'error'], |
|||
setup(_, { emit }) { |
|||
let uploading = false; |
|||
|
|||
const { uploadUrl } = useGlobSetting(); |
|||
const { t } = useI18n(); |
|||
const { prefixCls } = useDesign('tinymce-img-upload'); |
|||
function handleChange(info: Recordable) { |
|||
const file = info.file; |
|||
const status = file?.status; |
|||
|
|||
const url = file?.response?.url; |
|||
const name = file?.name; |
|||
if (status === 'uploading') { |
|||
if (!uploading) { |
|||
emit('uploading', name); |
|||
uploading = true; |
|||
} |
|||
} else if (status === 'done') { |
|||
emit('done', name, url); |
|||
uploading = false; |
|||
} else if (status === 'error') { |
|||
emit('error'); |
|||
uploading = false; |
|||
} |
|||
} |
|||
|
|||
return { |
|||
prefixCls, |
|||
handleChange, |
|||
uploadUrl, |
|||
t, |
|||
}; |
|||
}, |
|||
}); |
|||
</script> |
|||
<style lang="less" scoped> |
|||
@prefix-cls: ~'@{namespace}-tinymce-img-upload'; |
|||
|
|||
.@{prefix-cls} { |
|||
position: absolute; |
|||
top: 4px; |
|||
right: 10px; |
|||
z-index: 20; |
|||
} |
|||
</style> |
|||
Loading…
Reference in new issue