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.error(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>