fix some bug

This commit is contained in:
Timi
2026-08-03 19:20:51 +08:00
parent dd8534eaad
commit 2c3f93cd73
8 changed files with 94 additions and 39 deletions
+35 -21
View File
@@ -36,26 +36,12 @@
<body-area-selector v-model="selectedAreas" />
</div>
</t-cell-group>
<t-cell-group v-if="inviter" :title="`被 ${inviter.name} 邀请`" class="invite" theme="card">
<t-cell
:title="inviter.name"
arrow
<t-cell-group v-if="inviter" :title="`由 ${inviter.name} 邀请`" class="invite" theme="card">
<customer-profile-card
class="profile-card"
:customer="inviter"
@click="goCustomerDetail(inviter)"
>
<template #description>
<telephone-link :value="inviter.telephone" placeholder="未填写电话" />
</template>
<template #leftIcon>
<t-image
v-if="getCustomerPhotoURL(inviter)"
class="avatar"
:src="getCustomerPhotoURL(inviter)"
:alt="inviter.name"
fit="cover"
/>
<div v-else class="avatar fallback" v-text="(inviter.name || '客').slice(0, 1)" />
</template>
</t-cell>
/>
</t-cell-group>
<div class="invite">
<div class="header">
@@ -77,8 +63,8 @@
<t-cell-group theme="card">
<t-swipe-cell
class="item"
v-for="item in invitees"
:key="item.id || item.code"
v-for="(item, index) in invitees"
:key="item.id || item.code || index"
>
<t-cell
arrow
@@ -465,6 +451,21 @@ watch(() => route.params.id, async () => {
margin: 0 1rem;
}
:deep(.t-cell__title) {
flex: 0 0 auto;
}
:deep(.t-cell__title-text) {
white-space: nowrap;
}
:deep(.t-cell__note) {
flex: 1 1 auto;
min-width: 0;
white-space: normal;
overflow-wrap: anywhere;
}
.conditioning-part {
gap: .5rem;
padding: 1rem;
@@ -474,6 +475,19 @@ watch(() => route.params.id, async () => {
.invite {
.inviter-profile {
gap: .5rem;
display: flex;
cursor: pointer;
padding: .75rem;
align-items: center;
.profile-card {
flex: 1;
min-width: 0;
}
}
.item {
.title {
+2 -2
View File
@@ -415,7 +415,7 @@ async function saveCustomer(): Promise<void> {
const customerCode = formModel.code.trim();
const payload: Customer = {
...(currentCustomer.value || {}),
code: customerCode || undefined,
code: customerCode || null,
name: formModel.name,
gender: formModel.gender || undefined,
age: Number(formModel.age) || undefined,
@@ -426,7 +426,7 @@ async function saveCustomer(): Promise<void> {
remark: formModel.note,
disease: formModel.disease,
conditioningPart: selectedAreas.value,
introducerCustomerId: formModel.inviterCustomerId || undefined,
introducerCustomerId: formModel.inviterCustomerId || null,
attachmentIdList: photoTempFileId.value ? [photoTempFileId.value] : undefined
};
+3 -3
View File
@@ -16,8 +16,8 @@
<section class="items">
<div
class="item"
v-for="item in customerList"
:key="item.id || item.code"
v-for="(item, index) in customerList"
:key="item.id || item.code || index"
@click="goDetail(item)"
>
<t-image v-if="getCustomerPhotoURL(item)" :src="getCustomerPhotoURL(item)" :alt="item.name" fit="cover" class="avatar" />
@@ -28,7 +28,7 @@
<h4 class="value" v-text="item.name" />
<gender-icon :value="item.gender" size="1.125rem" />
</div>
<span class="meta gray" v-text="item.code" />
<span class="meta gray" v-text="item.code || ''" />
</div>
<div class="line">
<div class="gray">
@@ -45,13 +45,23 @@
required-mark
/>
<t-form-item label="登记时间" content-align="right">
<t-button
theme="primary"
variant="outline"
size="extra-small"
:content="registeredAtText || '此刻'"
@click="openRegisteredAtPicker"
/>
<div class="time-actions">
<t-button
theme="primary"
variant="outline"
size="extra-small"
:content="registeredAtText || '此刻'"
@click="openRegisteredAtPicker"
/>
<t-button
v-if="registeredAtText"
theme="primary"
variant="text"
size="extra-small"
content="此刻"
@click="resetRegisteredAt"
/>
</div>
</t-form-item>
<t-form-item label="登记备注">
<t-textarea
@@ -123,8 +133,9 @@
</div>
<t-popup v-model="registeredAtPickerVisible" placement="bottom">
<t-date-time-picker
v-if="registeredAtPickerVisible"
v-model="registeredAtDraftText"
:default-value="registeredAtDraftText"
:start="minimumDateTimeText"
:mode="['date', 'minute']"
format="YYYY-MM-DD HH:mm"
title="登记时间"
@@ -169,6 +180,7 @@ const selectedCustomerList = ref<Customer[]>([]);
const registrationEventList = ref<RegistrationEvent[]>([]);
const selectedRegistrationEventIdList = ref<string[]>([]);
const recentRecordList = ref<RegistrationEventRecord[]>([]);
const minimumDateTimeText = "1970-01-01 00:00";
const registeredAtText = ref("");
const registeredAtDraftText = ref("");
const registeredAtPickerVisible = ref(false);
@@ -436,6 +448,11 @@ function confirmRegisteredAt(): void {
registeredAtPickerVisible.value = false;
}
function resetRegisteredAt(): void {
registeredAtText.value = "";
registeredAtDraftText.value = "";
}
async function submitRecord(): Promise<void> {
if (!validateForm()) {
return;
@@ -611,6 +628,13 @@ watch(customerCode, async (value) => {
padding: 0 1rem;
margin-top: 1rem;
}
.time-actions {
gap: .5rem;
display: flex;
align-items: center;
justify-content: flex-end;
}
}
.record-photo {
@@ -560,6 +560,22 @@ onUnmounted(() => {
.cell {
padding: .5rem;
:deep(.t-cell__title) {
flex: 1 1 0;
min-width: 0;
}
:deep(.t-cell__title-text) {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
:deep(.t-cell__note) {
flex: 0 0 auto;
white-space: nowrap;
}
.photo {
width: 3.5rem;
height: 3.5rem;