diff --git a/src/pages/store/StoreBusinessDayCalendar.vue b/src/pages/store/StoreBusinessDayCalendar.vue
index 9fbdc09..68fed04 100644
--- a/src/pages/store/StoreBusinessDayCalendar.vue
+++ b/src/pages/store/StoreBusinessDayCalendar.vue
@@ -15,6 +15,7 @@
+
-
+
营业
休息
@@ -84,7 +85,7 @@
import { DialogPlugin, Toast, type CalendarProps, type TDate } from "tdesign-mobile-vue";
import { useUserStore } from "timi-web";
import StoreAPI from "@/api/StoreAPI";
-import type { Store, StoreBusinessDay, StoreBusinessDayOpenStatus } from "@/types/Store";
+import type { Store, StoreBusinessDay, StoreBusinessDayStatus } from "@/types/Store";
import { gaoRoleCodes, permissionCodes } from "@/utils/permission";
defineOptions({
@@ -130,8 +131,8 @@ const calendarFormat = computed>(() => {
}
return {
...dateItem,
- className: `business-day-${day.openStatus!.toLowerCase()}`,
- suffix: day.openStatus === "OPEN" ? "营" : "休"
+ className: `business-day-${day.status!.toLowerCase()}`,
+ suffix: day.status === "OPEN" ? "营" : "休"
};
};
});
@@ -176,7 +177,7 @@ const isDeleting = ref(false);
const editingId = ref("");
const formModel = reactive({
dateText: "",
- openStatus: "OPEN" as StoreBusinessDayOpenStatus,
+ status: "OPEN" as StoreBusinessDayStatus,
reason: "正常休息"
});
const savePermissionCode = computed(() => {
@@ -192,7 +193,7 @@ function openDayEditor(day?: StoreBusinessDay, dateValue = toDateValue(new Date(
editingId.value = day?.id || "";
Object.assign(formModel, {
dateText: formatDateValue(day?.dateValue || dateValue),
- openStatus: day?.openStatus || "OPEN",
+ status: day?.status || "OPEN",
reason: day ? day.reason : "正常休息"
});
editorVisible.value = true;
@@ -215,8 +216,8 @@ async function saveDay(): Promise {
id: editingId.value || undefined,
storeId: storeId.value,
dateValue: parseDateValue(formModel.dateText),
- openStatus: formModel.openStatus,
- reason: formModel.openStatus === "CLOSED" ? formModel.reason || undefined : undefined
+ status: formModel.status,
+ reason: formModel.status === "CLOSED" ? formModel.reason || undefined : undefined
};
if (editingId.value) {
await StoreAPI.updateBusinessDay(day);
@@ -317,10 +318,11 @@ onMounted(async () => {
.store-business-day-calendar {
gap: .75rem;
display: grid;
- padding: calc(var(--app-nav-height) + 1rem) 1rem 6rem;
+ padding: calc(var(--app-nav-height) + 1rem) 0 6rem;
.summary {
gap: .75rem;
+ margin: 0 1rem;
display: flex;
padding: .75rem;
border-radius: .75rem;
@@ -350,6 +352,7 @@ onMounted(async () => {
}
:deep(.t-calendar) {
+ margin: 0 1rem;
z-index: 1;
overflow: hidden;
border-radius: .75rem;
diff --git a/src/pages/store/StoreEdit.vue b/src/pages/store/StoreEdit.vue
index 8a43de2..3562b79 100644
--- a/src/pages/store/StoreEdit.vue
+++ b/src/pages/store/StoreEdit.vue
@@ -2,26 +2,39 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
保存
@@ -46,7 +59,8 @@
import { DialogPlugin, Toast } from "tdesign-mobile-vue";
import { useUserStore } from "timi-web";
import StoreAPI from "@/api/StoreAPI";
-import type { Store, StoreStatus } from "@/types/Store";
+import { useCurrentStoreStore } from "@/store/currentStoreStore";
+import type { StoreStatus } from "@/types/Store";
import { gaoRoleCodes, permissionCodes } from "@/utils/permission";
defineOptions({
@@ -56,6 +70,7 @@ defineOptions({
const route = useRoute();
const router = useRouter();
const userStore = useUserStore();
+const currentStoreStore = useCurrentStoreStore();
const routeId = computed(() => String(route.params.id || ""));
const isStoreManagerScope = computed(() => userStore.hasRoles(gaoRoleCodes.storeManager) && !userStore.hasRoles(gaoRoleCodes.globalManager));
@@ -68,105 +83,81 @@ const savePermissionCode = computed(() => isCreateMode.value ? permissionCodes.s
const isSaving = ref(false);
const isRemoving = ref(false);
-const formModel = reactive({
+const formData = reactive({
id: "",
code: "",
name: "",
status: "ACTIVE" as StoreStatus,
telephone: "",
address: "",
- remark: ""
+ remark: "",
+ autoClosedDay: true
});
-const sortValue = ref(0);
-// ---------- 页面数据 ----------
-
-async function fillForm(): Promise {
- if (!routeId.value) {
- return;
- }
-
- const current = await StoreAPI.detail(routeId.value);
- Object.assign(formModel, {
- id: current.id || "",
- code: current.code || "",
- name: current.name || "",
- status: current.status || "ACTIVE",
- telephone: current.telephone || "",
- address: current.address || "",
- remark: current.remark || ""
- });
- sortValue.value = current.sort ?? 0;
-}
-
-// ---------- 保存 ----------
-
-async function saveStore(): Promise {
+async function doSave(): Promise {
if (!validateForm()) {
return;
}
-
isSaving.value = true;
try {
- const store = buildStorePayload();
if (isCreateMode.value) {
- await StoreAPI.create(store);
+ await StoreAPI.create(formData);
} else {
- await StoreAPI.update(store);
+ await StoreAPI.update(formData);
+ await refreshCurrentStore();
}
Toast.success("门店已保存");
- if (isStoreManagerScope.value) {
- return;
+ if (userStore.hasPermissions(permissionCodes.store.create)) {
+ await router.replace("/management/stores");
+ } else {
+ await router.replace("/store");
}
- await router.replace("/management/stores");
} finally {
isSaving.value = false;
}
}
-function buildStorePayload(): Store {
- if (isStoreManagerScope.value) {
- return {
- id: formModel.id || undefined,
- name: formModel.name,
- telephone: formModel.telephone || undefined,
- address: formModel.address || undefined,
- remark: formModel.remark || undefined
- };
+async function refreshCurrentStore(): Promise {
+ if (formData.id !== currentStoreStore.currentStoreId) {
+ return;
}
- return {
- id: formModel.id || undefined,
- code: formModel.code,
- name: formModel.name,
- status: formModel.status,
- telephone: formModel.telephone || undefined,
- address: formModel.address || undefined,
- remark: formModel.remark || undefined,
- sort: sortValue.value
- };
+ await currentStoreStore.refreshCurrentStore(formData.id);
}
function validateForm(): boolean {
- if (!isStoreManagerScope.value && !formModel.code) {
+ if (!isStoreManagerScope.value && !formData.code) {
Toast.warning("请填写门店编码");
return false;
}
- if (!formModel.name) {
+ if (!formData.name) {
Toast.warning("请填写门店名称");
return false;
}
return true;
}
+onMounted(async () => {
+ try {
+ if (!routeId.value) {
+ return;
+ }
+ const current = await StoreAPI.detail(routeId.value);
+ Object.assign(formData, current);
+ } catch {
+ Toast.error("门店数据加载失败");
+ }
+});
+
+// ---------- 删除 ----------
+
async function confirmRemoveStore(): Promise {
- if (!formModel.id) {
+ if (!formData.id) {
return;
}
-
const dialog = DialogPlugin.confirm({
title: "删除门店",
- content: `确定删除 ${formModel.name} 吗?删除后无法恢复。`,
+ content: `确定删除 ${formData.name} 吗?删除后无法恢复。`,
cancelBtn: "取消",
confirmBtn: "删除",
onCancel() {
@@ -186,21 +177,13 @@ async function removeStore(): Promise {
isRemoving.value = true;
try {
- await StoreAPI.remove(formModel.id);
+ await StoreAPI.remove(formData.id);
Toast.success("门店已删除");
await router.replace("/management/stores");
} finally {
isRemoving.value = false;
}
}
-
-onMounted(async () => {
- try {
- await fillForm();
- } catch {
- Toast.error("门店数据加载失败");
- }
-});