use Message instead of Toast

This commit is contained in:
Timi
2026-08-22 01:08:23 +08:00
parent 94c17e6d81
commit e2af521996
46 changed files with 291 additions and 289 deletions
+4 -4
View File
@@ -86,7 +86,7 @@
</template>
<script setup lang="ts">
import { Toast } from "tdesign-mobile-vue";
import { Message } from "@/utils/message";
import { useUserStore } from "timi-web";
import CustomerAPI from "@/api/CustomerAPI";
import PointAPI from "@/api/PointAPI";
@@ -149,7 +149,7 @@ async function loadCustomerByCode(code: string): Promise<void> {
try {
const matched = await CustomerAPI.findByCode(normalizedCode);
if (!matched?.id) {
Toast.warning("未找到客户");
Message.warning("未找到客户");
return;
}
selectedCustomerId.value = matched.id;
@@ -160,7 +160,7 @@ async function loadCustomerByCode(code: string): Promise<void> {
});
await loadAccount();
} catch {
Toast.error("客户信息加载失败");
Message.error("客户信息加载失败");
}
}
@@ -183,7 +183,7 @@ async function loadAccount(): Promise<void> {
} catch {
customer.value = undefined;
account.value = undefined;
Toast.error("客户信息加载失败");
Message.error("客户信息加载失败");
} finally {
isLoading.value = false;
}
+12 -12
View File
@@ -81,7 +81,7 @@
</template>
<script setup lang="ts">
import { Toast } from "tdesign-mobile-vue";
import { Message } from "@/utils/message";
import { useUserStore } from "timi-web";
import type { PointAction } from "@/types/Point";
import CustomerAPI from "@/api/CustomerAPI";
@@ -141,7 +141,7 @@ async function loadCustomerByCode(code: string): Promise<void> {
try {
const matched = await CustomerAPI.findByCode(normalizedCode);
if (!matched?.id) {
Toast.warning("未找到客户");
Message.warning("未找到客户");
return;
}
selectedCustomerId.value = matched.id;
@@ -150,7 +150,7 @@ async function loadCustomerByCode(code: string): Promise<void> {
} catch {
selectedCustomer.value = undefined;
account.value = undefined;
Toast.error("客户信息加载失败");
Message.error("客户信息加载失败");
}
}
@@ -173,7 +173,7 @@ async function loadCustomerAccount(): Promise<void> {
} catch {
selectedCustomer.value = undefined;
account.value = undefined;
Toast.error("客户信息加载失败");
Message.error("客户信息加载失败");
}
}
@@ -243,23 +243,23 @@ function confirmPointActionPicker(value: Array<string | number>): void {
async function submitAdjust(): Promise<void> {
const pointDelta = parsePointDelta();
if (!selectedCustomerId.value) {
Toast.warning("请选择客户");
Message.warning("请选择客户");
return;
}
if (!currentStoreStore.currentStoreId) {
Toast.warning("当前门店未设置");
Message.warning("当前门店未设置");
return;
}
if (!pointDelta) {
Toast.warning("调整积分不能为 0,且必须是整数");
Message.warning("调整积分不能为 0,且必须是整数");
return;
}
if (!remark.value.trim()) {
Toast.warning("请填写调整原因");
Message.warning("请填写调整原因");
return;
}
if (pointDelta < 0 && Math.abs(pointDelta) > (account.value?.balance ?? 0)) {
Toast.warning("扣分后余额不能小于 0");
Message.warning("扣分后余额不能小于 0");
return;
}
@@ -272,13 +272,13 @@ async function submitAdjust(): Promise<void> {
pointDelta,
remark: remark.value.trim()
});
Toast.success("积分调整已提交");
Message.success("积分调整已提交");
await router.replace({
name: "PointLedgerList",
query: { customerId: selectedCustomerId.value }
});
} catch (error) {
Toast.error(getErrorMessage(error, "积分调整失败"));
Message.error(getErrorMessage(error, "积分调整失败"));
} finally {
isSaving.value = false;
}
@@ -293,7 +293,7 @@ onMounted(async () => {
await prepareStoreScope();
await loadCustomerAccount();
} catch (error) {
Toast.error(getErrorMessage(error, "门店信息加载失败"));
Message.error(getErrorMessage(error, "门店信息加载失败"));
}
});
</script>
+6 -5
View File
@@ -154,7 +154,7 @@
</template>
<script setup lang="ts">
import { Toast, type DropdownValue } from "tdesign-mobile-vue";
import type { DropdownValue } from "tdesign-mobile-vue";
import { Time, type PageResult, useUserStore } from "timi-web";
import CustomerAPI from "@/api/CustomerAPI";
import PointAPI from "@/api/PointAPI";
@@ -165,6 +165,7 @@ import { useSettingStore } from "@/store/settingStore";
import type { Customer } from "@/types/Customer";
import type { PointLedger, PointLedgerChangeType, PointLedgerPage } from "@/types/Point";
import { getCustomerPhotoURL } from "@/utils/customer";
import { Message } from "@/utils/message";
import { gaoRoleCodes, permissionCodes } from "@/utils/permission";
type DateFilter = "all" | "today" | "last7" | "last30" | "custom";
@@ -228,14 +229,14 @@ async function loadCustomerByCode(code: string): Promise<void> {
try {
const matched = await CustomerAPI.findByCode(normalizedCode);
if (!matched?.id) {
Toast.warning("未找到客户");
Message.warning("未找到客户");
return;
}
selectedCustomerId.value = matched.id;
customer.value = matched;
await reload();
} catch {
Toast.error("客户信息加载失败");
Message.error("客户信息加载失败");
}
}
@@ -353,7 +354,7 @@ async function load(): Promise<void> {
page.index += 1;
isNoMore.value = pageResult.list.length >= pageResult.total || list.length < page.size;
} catch {
Toast.error("积分流水加载失败");
Message.error("积分流水加载失败");
} finally {
if (token === loadToken) {
isLoading.value = false;
@@ -492,7 +493,7 @@ onMounted(async () => {
try {
await preparePage();
} catch {
Toast.error("积分流水页面加载失败");
Message.error("积分流水页面加载失败");
}
});
</script>
+42 -27
View File
@@ -189,7 +189,7 @@
</template>
<script setup lang="ts">
import { DialogPlugin, Toast } from "tdesign-mobile-vue";
import { DialogPlugin } from "tdesign-mobile-vue";
import { Time, useUserStore } from "timi-web";
import EventAPI from "@/api/EventAPI";
import PointAPI from "@/api/PointAPI";
@@ -197,11 +197,26 @@ import PointRuleTierEditor from "@/pages/point/component/PointRuleTierEditor.vue
import { useCurrentStoreStore } from "@/store/currentStoreStore";
import { useNavBarStore } from "@/store/navBarStore";
import type { EventItem } from "@/types/EventItem";
import type { PointAction, PointRule, PointRuleMode, PointRuleStatus, PointRuleTier, PointRuleTierForm, PointRuleTriggerType } from "@/types/Point";
import type {
PointAction,
PointRule,
PointRuleMode,
PointRuleStatus,
PointRuleTier,
PointRuleTierForm,
PointRuleTriggerType
} from "@/types/Point";
import { getEventValueUnitText } from "@/utils/eventValue";
import { getErrorMessage } from "@/utils/error";
import { gaoRoleCodes, permissionCodes } from "@/utils/permission";
import { formatTierBoundaryValue, getTierMinValue, isLastTier, resolveNonNegativeInteger, resolveTierBoundaryValue } from "@/utils/pointRule";
import {
formatTierBoundaryValue,
getTierMinValue,
isLastTier,
resolveNonNegativeInteger,
resolveTierBoundaryValue
} from "@/utils/pointRule";
import { Message } from "@/utils/message";
type PickerValue = string | number;
@@ -316,7 +331,7 @@ async function confirmStorePicker(value: Array<string | number>): Promise<void>
await loadEventList();
} catch {
eventList.value = [];
Toast.error("登记事件加载失败");
Message.error("登记事件加载失败");
}
}
storePickerVisible.value = false;
@@ -324,7 +339,7 @@ async function confirmStorePicker(value: Array<string | number>): Promise<void>
function openEventPicker(): void {
if (!eventPickerColumns.value[0]?.length) {
Toast.warning("暂无可选登记事件");
Message.warning("暂无可选登记事件");
return;
}
eventPickerDraft.value = [formModel.eventId];
@@ -344,7 +359,7 @@ function openSourceEventPicker(): void {
return;
}
if (!sourceEventPickerColumns.value[0]?.length) {
Toast.warning("暂无可用的 NUMBER 来源事件");
Message.warning("暂无可用的 NUMBER 来源事件");
return;
}
sourceEventPickerDraft.value = [formModel.sourceEventId];
@@ -358,7 +373,7 @@ function confirmSourceEventPicker(value: Array<string | number>): void {
const nextSourceEvent = sourceEventList.value.find(item => item.id === sourceEventId);
if (formModel.sourceEventId && previousSourceEvent?.valueUnit !== nextSourceEvent?.valueUnit) {
formModel.tiers = [createTierForm(undefined, true, nextSourceEvent?.valueUnit)];
Toast.warning("来源事件单位已变化,原分档已清空,请重新配置");
Message.warning("来源事件单位已变化,原分档已清空,请重新配置");
}
formModel.sourceEventId = sourceEventId;
}
@@ -617,36 +632,36 @@ function buildCondition(): PointRule["conditionJson"] {
function validateForm(): boolean {
if (!formModel.storeId) {
Toast.warning("请选择门店");
Message.warning("请选择门店");
return false;
}
if (!formModel.eventId) {
Toast.warning("请选择登记事件");
Message.warning("请选择登记事件");
return false;
}
if (!formModel.name.trim()) {
Toast.warning("请输入规则名称");
Message.warning("请输入规则名称");
return false;
}
if (formModel.triggerType === "CUSTOMER_EVENT_VALUE_TIER") {
if (formModel.pointMode !== "TIER") {
Toast.warning("分档规则必须使用分档积分模式");
Message.warning("分档规则必须使用分档积分模式");
return false;
}
if (!selectedSourceEvent.value) {
Toast.warning("请选择 NUMBER 类型的来源事件");
Message.warning("请选择 NUMBER 类型的来源事件");
return false;
}
if (selectedSourceValueUnit.value !== "CENT" && selectedSourceValueUnit.value !== "COUNT") {
Toast.warning("来源事件必须配置数值单位");
Message.warning("来源事件必须配置数值单位");
return false;
}
if (!resolvePositiveInteger(formModel.windowAmountText)) {
Toast.warning("累计窗口必须是正整数");
Message.warning("累计窗口必须是正整数");
return false;
}
if (!formModel.tiers.length || !(formModel.tiers.length < 100)) {
Toast.warning("分档数量必须是 1-100 档");
Message.warning("分档数量必须是 1-100 档");
return false;
}
for (let i = 0; i < formModel.tiers.length; i++) {
@@ -654,17 +669,17 @@ function validateForm(): boolean {
const min = getTierMinValue(formModel.tiers, i, selectedSourceValueUnit.value);
const pointValue = resolveNonNegativeInteger(tier.pointValueText);
if (min === undefined) {
Toast.warning(`第 ${i + 1} 档的上一档最大值无效`);
Message.warning(`第 ${i + 1} 档的上一档最大值无效`);
return false;
}
if (pointValue === undefined) {
Toast.warning(`第 ${i + 1} 档积分数量必须是大于等于 0 的整数`);
Message.warning(`第 ${i + 1} 档积分数量必须是大于等于 0 的整数`);
return false;
}
if (!isLastTier(formModel.tiers, i)) {
const max = resolveTierBoundaryValue(tier.maxText, selectedSourceValueUnit.value);
if (max === undefined || max < min) {
Toast.warning(selectedSourceValueUnit.value === "CENT"
Message.warning(selectedSourceValueUnit.value === "CENT"
? `第 ${i + 1} 档最大值必须是不小于最小值且最多两位小数`
: `第 ${i + 1} 档最大值必须是不小于最小值的整数`);
return false;
@@ -672,25 +687,25 @@ function validateForm(): boolean {
}
}
} else if (formModel.pointMode === "FIXED" && !resolvePositiveInteger(formModel.pointValueText)) {
Toast.warning("积分数量必须是正整数");
Message.warning("积分数量必须是正整数");
return false;
}
if (formModel.triggerType === "AFTER_COUNT_EVERY_TIME" && !resolvePositiveInteger(formModel.thresholdText)) {
Toast.warning("请输入有效的触发阈值");
Message.warning("请输入有效的触发阈值");
return false;
}
if (formModel.pointMode === "SOURCE_VALUE") {
const min = resolvePositiveInteger(formModel.minText);
const max = resolvePositiveInteger(formModel.maxText);
if (!min || !max || max < min) {
Toast.warning("积分数量范围必须是正整数,且最大值不能小于最小值");
Message.warning("积分数量范围必须是正整数,且最大值不能小于最小值");
return false;
}
}
const beginAt = resolveTimestamp(formModel.beginAtText);
const endAt = resolveTimestamp(formModel.endAtText);
if (beginAt !== undefined && endAt !== undefined && endAt < beginAt) {
Toast.warning("生效结束时间不能早于开始时间");
Message.warning("生效结束时间不能早于开始时间");
return false;
}
return true;
@@ -722,10 +737,10 @@ async function saveRule(): Promise<void> {
} else {
await PointAPI.ruleUpdate(payload);
}
Toast.success("积分规则已保存");
Message.success("积分规则已保存");
await router.replace("/management/points/rules");
} catch (error) {
Toast.error(getErrorMessage(error, "积分规则保存失败"));
Message.error(getErrorMessage(error, "积分规则保存失败"));
} finally {
isSaving.value = false;
}
@@ -759,10 +774,10 @@ async function removeRule(): Promise<void> {
isRemoving.value = true;
try {
await PointAPI.ruleRemove(formModel.id);
Toast.success("积分规则已删除");
Message.success("积分规则已删除");
await router.replace("/management/points/rules");
} catch (error) {
Toast.error(getErrorMessage(error, "积分规则删除失败"));
Message.error(getErrorMessage(error, "积分规则删除失败"));
} finally {
isRemoving.value = false;
}
@@ -817,7 +832,7 @@ onMounted(async () => {
try {
await fillForm();
} catch (error) {
Toast.error(getErrorMessage(error, "积分规则加载失败"));
Message.error(getErrorMessage(error, "积分规则加载失败"));
}
});
+4 -3
View File
@@ -62,7 +62,7 @@
</template>
<script setup lang="ts">
import { type DropdownValue, Toast } from "tdesign-mobile-vue";
import { type DropdownValue } from "tdesign-mobile-vue";
import EventAPI from "@/api/EventAPI";
import PointAPI from "@/api/PointAPI";
import { useCurrentStoreStore } from "@/store/currentStoreStore";
@@ -71,6 +71,7 @@ import type { EventItem } from "@/types/EventItem";
import type { PointRule, PointRuleStatus } from "@/types/Point";
import { gaoRoleCodes, permissionCodes } from "@/utils/permission";
import { type Page, type PageResult, useUserStore } from "timi-web";
import { Message } from "@/utils/message.ts";
defineOptions({
name: "PointRuleList"
@@ -158,7 +159,7 @@ async function load(): Promise<void> {
page.index += 1;
isNoMore.value = pageResult.list.length >= pageResult.total || list.length < page.size;
} catch {
Toast.error("积分规则加载失败");
Message.error("积分规则加载失败");
} finally {
if (token === loadToken) {
isLoading.value = false;
@@ -274,7 +275,7 @@ onMounted(async () => {
try {
await preparePage();
} catch {
Toast.error("积分规则页面加载失败");
Message.error("积分规则页面加载失败");
}
});
+4 -4
View File
@@ -40,7 +40,7 @@
</template>
<script setup lang="ts">
import { Toast } from "tdesign-mobile-vue";
import { Message } from "@/utils/message";
import { VueDraggableNext } from "vue-draggable-next";
import EventAPI from "@/api/EventAPI";
import PointAPI from "@/api/PointAPI";
@@ -95,10 +95,10 @@ async function saveSort(): Promise<void> {
await PointAPI.ruleSort(idList);
ruleList.value.forEach((item, index) => { item.priority = index; });
sortDirty.value = false;
Toast.success("积分规则排序已保存");
Message.success("积分规则排序已保存");
await router.back();
} catch {
Toast.error("积分规则排序保存失败");
Message.error("积分规则排序保存失败");
} finally {
isSaving.value = false;
}
@@ -110,7 +110,7 @@ onMounted(async () => {
try {
await loadData();
} catch {
Toast.error("启用积分规则加载失败");
Message.error("启用积分规则加载失败");
}
});
@@ -94,7 +94,7 @@
import type { EventValueUnit } from "@/types/EventItem";
import type { PointAction, PointRuleTierForm } from "@/types/Point";
import { formatTierBoundaryValue, getTierMinText, getTierMinValue, isLastTier, resolveNonNegativeInteger, resolveTierBoundaryValue } from "@/utils/pointRule";
import { Toast } from "tdesign-mobile-vue";
import { Message } from "@/utils/message";
defineOptions({
name: "PointRuleTierEditor"
@@ -173,20 +173,20 @@ function confirmTierEditor(): void {
: getTierMinValue(tiers.value, index, valueUnit.value);
const pointValue = resolveNonNegativeInteger(tierEditorDraft.pointValueText);
if (min === undefined) {
Toast.warning(index < 1
Message.warning(index < 1
? valueUnit.value === "CENT" ? "首档最小值必须是非负且最多两位小数" : "首档最小值必须是非负整数"
: "请先修正上一档的最大值");
return;
}
if (pointValue === undefined) {
Toast.warning("积分数量必须是大于等于 0 的整数,允许填写 0");
Message.warning("积分数量必须是大于等于 0 的整数,允许填写 0");
return;
}
const shouldAddTier = tierEditorAdding.value && isLastTier(tiers.value, index);
if (!isLastTier(tiers.value, index) || shouldAddTier) {
const max = resolveTierBoundaryValue(tierEditorDraft.maxText, valueUnit.value);
if (max === undefined || max < min) {
Toast.warning(valueUnit.value === "CENT" ? "当前档最大值必须是不小于最小值且最多两位小数" : "当前档最大值必须是不小于最小值的整数");
Message.warning(valueUnit.value === "CENT" ? "当前档最大值必须是不小于最小值且最多两位小数" : "当前档最大值必须是不小于最小值的整数");
return;
}
tier.maxText = formatTierBoundaryValue(max, valueUnit.value);
@@ -206,7 +206,7 @@ function confirmTierEditor(): void {
function addTier(): void {
if (!(tiers.value.length < 100)) {
Toast.warning("最多配置 100 档");
Message.warning("最多配置 100 档");
return;
}
const lastTierIndex = tiers.value.length - 1;