PackageDetailModal.vue
2.72 KB
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<script lang="ts" setup>
  import { BasicModal, useModalInner } from '/@/components/Modal';
  import { BasicForm, useForm } from '/@/components/Form';
  import { ALG, formSchema, PackageField } from '../config/packageDetail.config';
  import { ref } from 'vue';
  import { createOtaPackage, uploadOtaPackages, deleteOtaPackage } from '/@/api/ota';
  import { CreateOtaPackageParams } from '/@/api/ota/model';
  interface FieldsValue extends CreateOtaPackageParams {
    fileList: { file: File }[];
    checksum?: string;
    checksumAlgorithm?: ALG;
  }
  const emit = defineEmits(['register', 'update:list']);
  const loading = ref(false);
  const [registerModal, { changeLoading, closeModal }] = useModalInner();
  const setLoading = (status: boolean) => {
    changeLoading(status);
    loading.value = status;
  };
  const [registerForm, { getFieldsValue, validate }] = useForm({
    schemas: formSchema,
    showActionButtonGroup: false,
    // labelCol: { span: 8 },
    labelWidth: 100,
    wrapperCol: { span: 16 },
  });
  const handleUploadFile = async (value: FieldsValue, id: string) => {
    try {
      const file = new FormData();
      file.append('file', value.fileList.at(0)!.file);
      await uploadOtaPackages({
        otaPackageId: id,
        file,
        checksumAlgorithm: value.checksumAlgorithm,
      });
    } catch (error) {
      console.log(error);
      if ((error as { status: number }).status) {
        await deleteOtaPackage(id);
      }
    } finally {
      closeModal();
      emit('update:list');
    }
  };
  const handleCreatePackages = async (value: FieldsValue) => {
    try {
      setLoading(true);
      const { id } = await createOtaPackage(value);
      const { isURL } = value;
      if (!isURL) {
        await handleUploadFile(value, id.id);
      }
    } catch (error) {
    } finally {
      setLoading(false);
    }
  };
  const handleSubmit = async () => {
    try {
      await validate();
      const value = getFieldsValue();
      value[PackageField.DEVICE_PROFILE_INFO] = JSON.parse(value[PackageField.DEVICE_PROFILE_INFO]);
      value[PackageField.ADDITIONAL_INFO] = {
        [PackageField.DESCRIPTION]: value[PackageField.DESCRIPTION],
      };
      handleCreatePackages(value as unknown as FieldsValue);
    } catch (error) {
      window.console.error(error);
    }
  };
</script>
<template>
  <BasicModal
    title="包管理"
    destroy-on-close
    :ok-button-props="{ loading }"
    @register="registerModal"
    @ok="handleSubmit"
  >
    <BasicForm @register="registerForm" class="package-manage-form" />
  </BasicModal>
</template>
<style scoped lang="less">
  .package-manage-form {
    :deep(.ant-form-item-control-input-content > div > div) {
      width: 100% !important;
    }
  }
</style>