fix edit customer lost photo

This commit is contained in:
Timi
2026-08-18 15:22:36 +08:00
parent 9c57dcfc87
commit eaee1ae49b
+19 -5
View File
@@ -59,7 +59,7 @@
:loading="isPhotoUploading"
:preview="false"
@add="openPhotoPicker"
@clear="photoTempFileId = ''"
@clear="handlePhotoClear"
/>
</t-form-item>
<t-form-item label="性别">
@@ -168,7 +168,7 @@
</template>
<script setup lang="ts">
import { AttachmentAPI, useUserStore } from "timi-web";
import { AttachmentAPI, useUserStore, type Attachment } from "timi-web";
import { Toast } from "tdesign-mobile-vue";
import CustomerAPI from "@/api/CustomerAPI";
import BodyAreaSelector from "@/components/BodyAreaSelector.vue";
@@ -178,7 +178,7 @@ import PhotoField from "@/components/PhotoField.vue";
import { useCurrentStoreStore } from "@/store/currentStoreStore";
import { useSettingStore } from "@/store/settingStore";
import type { BodyAreaValue, Customer } from "@/types/Customer";
import { createBodyAreaValue, normalizeBodyAreaValue } from "@/utils/customer";
import { createBodyAreaValue, getCustomerPhotoURL, normalizeBodyAreaValue } from "@/utils/customer";
import { gaoRoleCodes, permissionCodes } from "@/utils/permission";
import { compressUploadImage } from "@/utils/imageCompression";
@@ -279,6 +279,8 @@ const photoInputRef = ref<HTMLInputElement>();
const photoTempFileId = ref("");
const isPhotoUploading = ref(false);
const photoURL = ref();
const originalAttachmentList = ref<Attachment[]>([]);
const photoChanged = ref(false);
const selectedAreas = ref<BodyAreaValue>(createBodyAreaValue());
const formData = reactive<Customer>({
});
@@ -349,6 +351,10 @@ async function loadDetail() {
const customer = await CustomerAPI.detail(id);
Object.assign(formData, customer);
formData.storeId = customer.storeId || formData.storeId;
photoURL.value = getCustomerPhotoURL(customer);
originalAttachmentList.value = [...(customer.attachmentList || [])];
photoTempFileId.value = "";
photoChanged.value = false;
selectedAreas.value = normalizeBodyAreaValue(customer.conditioningPart);
introducerCustomerId.value = customer.introducerCustomerId || customer.introducerCustomer?.id || "";
} catch (err) {
@@ -394,12 +400,18 @@ async function handlePhotoSelected(event: Event): Promise<void> {
const [tempFile] = await AttachmentAPI.upload(compressedFile);
photoTempFileId.value = tempFile.id;
photoURL.value = AttachmentAPI.getTempReadURL(tempFile.id);
photoChanged.value = true;
} finally {
isPhotoUploading.value = false;
input.value = "";
}
}
function handlePhotoClear(): void {
photoTempFileId.value = "";
photoChanged.value = true;
}
// ---------- 保存 ----------
const isSubmitting = ref(false);
@@ -415,10 +427,12 @@ async function doSubmit(): Promise<void> {
const payload: Customer = { ...formData };
payload.conditioningPart = selectedAreas.value;
payload.introducerCustomerId = introducerCustomerId.value || "";
payload.attachmentList = photoTempFileId.value ? [{
payload.attachmentList = photoChanged.value
? (photoTempFileId.value ? [{
attachType: "PHOTO",
tempFileId: photoTempFileId.value
}] : undefined;
}] : [])
: [...originalAttachmentList.value];
delete payload.introducerCustomer;
if (isCreateMode.value) {