干燥机配套车间生产管理系统/云平台服务端
baoshiwei
2023-03-10 1fb197352b6a263646e4ccd3ed1c7854ede031dd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<template>
  <BasicModal @register="registerModal" :title="modalTitle" :width="width" @ok="handleOk" v-bind="$attrs">
    <JUpload ref="uploadRef" :value="value" v-bind="uploadBinds.props" @change="emitValue" />
  </BasicModal>
</template>
 
<script lang="ts" setup>
  import { ref, unref, reactive, computed, nextTick } from 'vue';
  import { BasicModal, useModalInner } from '/@/components/Modal';
  import { useMessage } from '/@/hooks/web/useMessage';
  import JUpload from './JUpload.vue';
  import { UploadTypeEnum } from './upload.data';
  import { propTypes } from '/@/utils/propTypes';
 
  const { createMessage } = useMessage();
  const emit = defineEmits(['change', 'update:value', 'register']);
  const props = defineProps({
    value: propTypes.oneOfType([propTypes.string, propTypes.array]),
    width: propTypes.number.def(520),
  });
 
  const uploadRef = ref();
  const uploadBinds = reactive({ props: {} as any });
  const modalTitle = computed(() => (uploadBinds.props?.fileType === UploadTypeEnum.image ? '图片上传' : '文件上传'));
 
  // 注册弹窗
  const [registerModal, { closeModal }] = useModalInner(async (data) => {
    uploadBinds.props = unref(data) || {};
    if ([UploadTypeEnum.image, 'img', 'picture'].includes(uploadBinds.props?.fileType)) {
      uploadBinds.props.fileType = UploadTypeEnum.image;
    } else {
      uploadBinds.props.fileType = UploadTypeEnum.file;
    }
    nextTick(() => uploadRef.value.addActionsListener());
  });
 
  function handleOk() {
    closeModal();
  }
 
  function emitValue(value) {
    emit('change', value);
    emit('update:value', value);
  }
</script>