|
@@ -3,44 +3,122 @@
|
|
<el-tooltip content="全局文件上传" placement="top">
|
|
<el-tooltip content="全局文件上传" placement="top">
|
|
<hc-icon name="upload-cloud" class="header-icon" />
|
|
<hc-icon name="upload-cloud" class="header-icon" />
|
|
</el-tooltip>
|
|
</el-tooltip>
|
|
-
|
|
|
|
- <!-- 上传文件 -->
|
|
|
|
- <hc-upload-file ref="uploadRef" :echo-params="params" modal="drawer" :options="options" @success="success" />
|
|
|
|
</div>
|
|
</div>
|
|
|
|
+ <!-- 上传文件 -->
|
|
|
|
+ <hc-upload-file
|
|
|
|
+ ref="uploadRef"
|
|
|
|
+ :params="params"
|
|
|
|
+ :echo-params="echoParams"
|
|
|
|
+ modal="drawer"
|
|
|
|
+ :options="options"
|
|
|
|
+ :drop="isDrop"
|
|
|
|
+ use-file
|
|
|
|
+ @progress="uploadProgress"
|
|
|
|
+ @error="uploadError"
|
|
|
|
+ @cancel="uploadCancel"
|
|
|
|
+ @item="uploadItem"
|
|
|
|
+ @finish="uploadFinish"
|
|
|
|
+ @success="uploadSuccess"
|
|
|
|
+ />
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
-import { onMounted, onUnmounted, ref } from 'vue'
|
|
|
|
|
|
+import { getObjValue } from 'js-fast-way'
|
|
|
|
+import { onMounted, onUnmounted, ref, watch } from 'vue'
|
|
import { emitter, getHeader } from 'hc-vue3-ui'
|
|
import { emitter, getHeader } from 'hc-vue3-ui'
|
|
|
|
+import HcUpload from '~src/plugins/HcUpload'
|
|
|
|
+import { useRoute } from 'vue-router'
|
|
|
|
+const useRoutes = useRoute()
|
|
|
|
+
|
|
|
|
+const EVENT_KEY = 'hc-global-upload-file'
|
|
|
|
|
|
//页面渲染
|
|
//页面渲染
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
- //注册监听事件
|
|
|
|
- emitter.on('hc-global-upload-file', (data) => {
|
|
|
|
- console.log('微型事件测试:', data)
|
|
|
|
- })
|
|
|
|
|
|
+ HcUpload.router(useRoutes?.name)
|
|
|
|
+ setEmitterData()
|
|
|
|
+})
|
|
|
|
+
|
|
|
|
+//监听路由变化
|
|
|
|
+watch(() => useRoutes?.name, (name) => {
|
|
|
|
+ HcUpload.router(name)
|
|
})
|
|
})
|
|
|
|
|
|
//上传文件
|
|
//上传文件
|
|
const uploadRef = ref(null)
|
|
const uploadRef = ref(null)
|
|
const params = ref({})
|
|
const params = ref({})
|
|
-const options = ref({
|
|
|
|
- headers: getHeader(),
|
|
|
|
-})
|
|
|
|
|
|
+const echoParams = ref({})
|
|
|
|
+const options = ref({})
|
|
|
|
+const isDrop = ref(false)
|
|
|
|
+
|
|
|
|
+//注册监听事件
|
|
|
|
+const setEmitterData = () => {
|
|
|
|
+ emitter.on(EVENT_KEY, ({ key, data }) => {
|
|
|
|
+ if (key === 'params') {
|
|
|
|
+ //处理请求头
|
|
|
|
+ const headers = getObjValue(data.options.headers)
|
|
|
|
+ data.options.headers = { ...headers, ...getHeader() }
|
|
|
|
+ //设置参数
|
|
|
|
+ params.value = data.params
|
|
|
|
+ echoParams.value = data.echoParams
|
|
|
|
+ options.value = data.options
|
|
|
|
+ isDrop.value = data.isDrop
|
|
|
|
+ } else if (key === 'show') {
|
|
|
|
+ uploadRef.value?.setModalShow(true)
|
|
|
|
+ } else if (key === 'close') {
|
|
|
|
+ uploadRef.value?.setModalShow(false)
|
|
|
|
+ } else if (key === 'open') {
|
|
|
|
+ uploadRef.value?.selectFile()
|
|
|
|
+ } else if (key === 'clear') {
|
|
|
|
+ uploadRef.value?.cancelUpload()
|
|
|
|
+ } else if (key === 'cancel') {
|
|
|
|
+ uploadRef.value?.allCancel()
|
|
|
|
+ } else if (key === 'getUploading') {
|
|
|
|
+ const bool = uploadRef.value?.getIsUploading()
|
|
|
|
+ emitter.emit(`${EVENT_KEY}-get-uploading`, bool)
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
|
|
-//上传成功
|
|
|
|
-const success = () => {
|
|
|
|
|
|
+//文件上传中,此事件是单个文件上传中时会触发
|
|
|
|
+const uploadProgress = ({ file, status }) => {
|
|
|
|
+ emitter.emit(`${EVENT_KEY}-progress`, { file, status })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//文件上传失败 ,返回一个当前文件的数据对象
|
|
|
|
+const uploadError = (file) => {
|
|
|
|
+ emitter.emit(`${EVENT_KEY}-error`, file)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//文件上传成功,返回一个当前文件的数据对象
|
|
|
|
+const uploadSuccess = (file) => {
|
|
|
|
+ emitter.emit(`${EVENT_KEY}-success`, file)
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//取消上传并从列表中移除
|
|
|
|
+const uploadCancel = ({ item, index }) => {
|
|
|
|
+ emitter.emit(`${EVENT_KEY}-cancel`, { item, index })
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+//点击了使用此文件的事件
|
|
|
|
+const uploadItem = ({ item, index }) => {
|
|
|
|
+ emitter.emit(`${EVENT_KEY}-item`, { item, index })
|
|
|
|
+}
|
|
|
|
|
|
|
|
+//全部文件上传完成
|
|
|
|
+const uploadFinish = (files) => {
|
|
|
|
+ emitter.emit(`${EVENT_KEY}-finish`, files)
|
|
}
|
|
}
|
|
|
|
|
|
//展开上传文件
|
|
//展开上传文件
|
|
const uploadClick = () => {
|
|
const uploadClick = () => {
|
|
|
|
+ console.log('展开上传文件')
|
|
uploadRef.value?.setModalShow(true)
|
|
uploadRef.value?.setModalShow(true)
|
|
}
|
|
}
|
|
|
|
|
|
//页面被注销,关闭监听事件
|
|
//页面被注销,关闭监听事件
|
|
onUnmounted(() => {
|
|
onUnmounted(() => {
|
|
- emitter.off('hc-global-upload-file')
|
|
|
|
|
|
+ emitter.off(EVENT_KEY)
|
|
|
|
+ HcUpload.resetAll()
|
|
})
|
|
})
|
|
</script>
|
|
</script>
|
|
|
|
|