From 1b1121f05271ba43d04b844f311c3213e73f4763 Mon Sep 17 00:00:00 2001 From: Timi Date: Fri, 7 Aug 2026 14:40:35 +0800 Subject: [PATCH] fix store business day --- src/api/StoreAPI.ts | 6 +- src/pages/management/CustomerList.vue | 2 +- .../management/StoreBusinessDayCalendar.vue | 437 ++++++++++++++++++ src/pages/management/StoreBusinessDayList.vue | 406 ---------------- src/pages/management/StoreEdit.vue | 109 ++--- src/pages/management/StoreList.vue | 81 ++-- src/pages/management/StoreSort.vue | 327 +++++++++++++ src/router/routes/managementRoutes.ts | 21 +- src/styles/global.less | 7 + 9 files changed, 871 insertions(+), 525 deletions(-) create mode 100644 src/pages/management/StoreBusinessDayCalendar.vue delete mode 100644 src/pages/management/StoreBusinessDayList.vue create mode 100644 src/pages/management/StoreSort.vue diff --git a/src/api/StoreAPI.ts b/src/api/StoreAPI.ts index 28e6801..ef80e84 100644 --- a/src/api/StoreAPI.ts +++ b/src/api/StoreAPI.ts @@ -22,6 +22,10 @@ async function update(store: Store): Promise { await axios.post(`${STORE_BASE_URI}/update`, store); } +async function sort(idList: string[]): Promise { + await axios.post(`${STORE_BASE_URI}/sort`, idList); +} + async function remove(id: string): Promise { await axios.post(`${STORE_BASE_URI}/delete`, undefined, { params: { id } @@ -73,6 +77,7 @@ export default { detail, create, update, + sort, remove, exportXSSF, businessDayList, @@ -82,4 +87,3 @@ export default { updateBusinessDay, removeBusinessDay }; - diff --git a/src/pages/management/CustomerList.vue b/src/pages/management/CustomerList.vue index b664530..896d43d 100644 --- a/src/pages/management/CustomerList.vue +++ b/src/pages/management/CustomerList.vue @@ -11,7 +11,7 @@
客户总数: - +
+
+
+
+
+ +
+
+ 地址: + +
+
+
+ +
+
+
+
+ +
+
+
+
+
+ + + + 营业 + 休息 + + + + + + + 切换营业或休息可能影响连续登记统计,系统重排营业日事件序列可能需要较长时间。 +
+ 删除 + 保存 +
+
+ + + + + + diff --git a/src/pages/management/StoreBusinessDayList.vue b/src/pages/management/StoreBusinessDayList.vue deleted file mode 100644 index 75baa05..0000000 --- a/src/pages/management/StoreBusinessDayList.vue +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - diff --git a/src/pages/management/StoreEdit.vue b/src/pages/management/StoreEdit.vue index 618d756..60528d7 100644 --- a/src/pages/management/StoreEdit.vue +++ b/src/pages/management/StoreEdit.vue @@ -7,11 +7,8 @@ - - + + @@ -19,29 +16,29 @@ - - - - +
- 删除 - 保存 + 删除 + 保存
- - -
@@ -50,9 +47,6 @@ import { DialogPlugin, Toast } from "tdesign-mobile-vue"; import StoreAPI from "@/api/StoreAPI"; import type { Store, StoreStatus } from "@/types/Store"; import { permissionCodes } from "@/utils/permission"; -import { getStoreStatusText } from "@/utils/store"; - -type PickerValue = string | number; defineOptions({ name: "StoreEdit" @@ -78,31 +72,9 @@ const formModel = reactive({ status: "ACTIVE" as StoreStatus, telephone: "", address: "", - remark: "", - sortText: "0" + remark: "" }); - -// ---------- 状态选择 ---------- - -const statusPickerVisible = ref(false); -const statusPickerDraft = ref(["ACTIVE"]); -const statusPickerColumns = [ - [ - { label: "启用", value: "ACTIVE" }, - { label: "停用", value: "INACTIVE" } - ] -]; - -function openStatusPicker(): void { - statusPickerDraft.value = [formModel.status]; - statusPickerVisible.value = true; -} - -function confirmStatusPicker(): void { - const nextStatus = String(statusPickerDraft.value[0] || "ACTIVE") as StoreStatus; - formModel.status = nextStatus; - statusPickerVisible.value = false; -} +const sortValue = ref(0); // ---------- 页面数据 ---------- @@ -119,9 +91,9 @@ async function fillForm(): Promise { status: current.status || "ACTIVE", telephone: current.telephone || "", address: current.address || "", - remark: current.remark || "", - sortText: String(current.sort ?? 0) + remark: current.remark || "" }); + sortValue.value = current.sort ?? 0; } // ---------- 保存 ---------- @@ -141,14 +113,15 @@ async function saveStore(): Promise { telephone: formModel.telephone || undefined, address: formModel.address || undefined, remark: formModel.remark || undefined, - sort: Number(formModel.sortText || 0) + sort: sortValue.value }; - const savedId = isCreateMode.value ? await StoreAPI.create(store) : formModel.id; - if (!isCreateMode.value) { + if (isCreateMode.value) { + await StoreAPI.create(store); + } else { await StoreAPI.update(store); } Toast.success("门店已保存"); - await router.replace(`/management/stores/${savedId}`); + await router.replace("/management/stores"); } finally { isSaving.value = false; } @@ -163,10 +136,6 @@ function validateForm(): boolean { Toast.warning("请填写门店名称"); return false; } - if (Number.isNaN(Number(formModel.sortText || 0))) { - Toast.warning("排序值必须是数字"); - return false; - } return true; } @@ -216,7 +185,10 @@ onMounted(async () => { - diff --git a/src/pages/management/StoreList.vue b/src/pages/management/StoreList.vue index 7f6f110..46f5656 100644 --- a/src/pages/management/StoreList.vue +++ b/src/pages/management/StoreList.vue @@ -6,20 +6,30 @@ @refresh="refresh" @scrolltolower="fetch" > -
-
-
- - -
- - - -
- -
+ + + + + +
-
+
@@ -40,8 +50,9 @@ - diff --git a/src/pages/management/StoreSort.vue b/src/pages/management/StoreSort.vue new file mode 100644 index 0000000..6b77caf --- /dev/null +++ b/src/pages/management/StoreSort.vue @@ -0,0 +1,327 @@ + + + + + diff --git a/src/router/routes/managementRoutes.ts b/src/router/routes/managementRoutes.ts index dfe0f63..946f722 100644 --- a/src/router/routes/managementRoutes.ts +++ b/src/router/routes/managementRoutes.ts @@ -3,9 +3,10 @@ import ManagementSettings from "@/pages/management/ManagementSettings.vue"; import ManagementProfile from "@/pages/management/ManagementProfile.vue"; import ManagementPassword from "@/pages/management/ManagementPassword.vue"; import ManagementQrCode from "@/pages/management/ManagementQrCode.vue"; -import StoreBusinessDayList from "@/pages/management/StoreBusinessDayList.vue"; +import StoreBusinessDayCalendar from "@/pages/management/StoreBusinessDayCalendar.vue"; import StoreEdit from "@/pages/management/StoreEdit.vue"; import StoreList from "@/pages/management/StoreList.vue"; +import StoreSort from "@/pages/management/StoreSort.vue"; export const storeRoutes: RouteRecordRaw[] = [ { @@ -36,6 +37,20 @@ export const storeRoutes: RouteRecordRaw[] = [ darkBodyBackground: "#10161f" } }, + { + path: "/management/stores/sort", + name: "StoreSort", + component: StoreSort, + meta: { + depth: 4, + navBarVisible: true, + navBarCanBack: true, + navBarTitle: "门店排序", + tabBarVisible: false, + bodyBackground: "#F5F5F8", + darkBodyBackground: "#10161f" + } + }, { path: "/management/stores/:id", name: "StoreEdit", @@ -52,8 +67,8 @@ export const storeRoutes: RouteRecordRaw[] = [ }, { path: "/management/stores/:id/business-days", - name: "StoreBusinessDayList", - component: StoreBusinessDayList, + name: "StoreBusinessDayCalendar", + component: StoreBusinessDayCalendar, meta: { depth: 5, navBarVisible: true, diff --git a/src/styles/global.less b/src/styles/global.less index 0cb3bb2..8a41c09 100644 --- a/src/styles/global.less +++ b/src/styles/global.less @@ -37,3 +37,10 @@ html.theme-dark body { .t-form__label { color: #555; } + +.load-state { + color: var(--tui-gray); + padding: .75rem; + text-align: center; + font-size: .875rem; +}