|
|
|
|
@ -416,7 +416,7 @@ import {
|
|
|
|
|
ref,
|
|
|
|
|
shallowRef,
|
|
|
|
|
} from "vue";
|
|
|
|
|
import { useRouter } from "vue-router";
|
|
|
|
|
import { onBeforeRouteLeave, useRouter } from "vue-router";
|
|
|
|
|
import { ElMessage } from "element-plus";
|
|
|
|
|
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
|
|
|
|
|
import "@wangeditor/editor/dist/css/style.css";
|
|
|
|
|
@ -551,9 +551,72 @@ const onReset = () => {
|
|
|
|
|
onSearch();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// sessionStorage 缓存 key:保存列表页的筛选/分页状态,避免从详情或处理页返回时被重置
|
|
|
|
|
const LIST_STATE_KEY = "admin_orders_list_state";
|
|
|
|
|
|
|
|
|
|
const saveListState = () => {
|
|
|
|
|
try {
|
|
|
|
|
const state = {
|
|
|
|
|
filters: { ...filters },
|
|
|
|
|
dateRange: Array.isArray(dateRange.value) ? [...dateRange.value] : [],
|
|
|
|
|
page: page.value,
|
|
|
|
|
pageSize: pageSize.value,
|
|
|
|
|
activeStat: activeStat.value,
|
|
|
|
|
};
|
|
|
|
|
sessionStorage.setItem(LIST_STATE_KEY, JSON.stringify(state));
|
|
|
|
|
} catch (_) {
|
|
|
|
|
// 隐私模式或存储满等情况静默忽略,避免影响主流程
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const restoreListState = () => {
|
|
|
|
|
try {
|
|
|
|
|
const raw = sessionStorage.getItem(LIST_STATE_KEY);
|
|
|
|
|
if (!raw) return;
|
|
|
|
|
const state = JSON.parse(raw);
|
|
|
|
|
if (!state || typeof state !== "object") return;
|
|
|
|
|
if (state.filters && typeof state.filters === "object") {
|
|
|
|
|
Object.assign(filters, state.filters);
|
|
|
|
|
}
|
|
|
|
|
if (Array.isArray(state.dateRange)) {
|
|
|
|
|
dateRange.value = state.dateRange;
|
|
|
|
|
}
|
|
|
|
|
if (typeof state.page === "number" && state.page > 0) {
|
|
|
|
|
page.value = state.page;
|
|
|
|
|
}
|
|
|
|
|
if (typeof state.pageSize === "number" && state.pageSize > 0) {
|
|
|
|
|
pageSize.value = state.pageSize;
|
|
|
|
|
}
|
|
|
|
|
if (typeof state.activeStat === "string") {
|
|
|
|
|
activeStat.value = state.activeStat;
|
|
|
|
|
}
|
|
|
|
|
} catch (_) {
|
|
|
|
|
// 解析失败时静默忽略
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const clearListState = () => {
|
|
|
|
|
try {
|
|
|
|
|
sessionStorage.removeItem(LIST_STATE_KEY);
|
|
|
|
|
} catch (_) {
|
|
|
|
|
/* noop */
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const goDetail = (id) => router.push(`/admin/orders/detail/${id}`);
|
|
|
|
|
const goProcess = (id) => router.push(`/admin/orders/process/${id}`);
|
|
|
|
|
|
|
|
|
|
// 跳转到详情 / 处理页前缓存当前搜索状态
|
|
|
|
|
onBeforeRouteLeave((to) => {
|
|
|
|
|
const path = to?.path || "";
|
|
|
|
|
if (
|
|
|
|
|
path.startsWith("/admin/orders/detail") ||
|
|
|
|
|
path.startsWith("/admin/orders/process")
|
|
|
|
|
) {
|
|
|
|
|
saveListState();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 颜色标签可选值(颜色 Hex 取自设计原型)
|
|
|
|
|
const colorOptions = [
|
|
|
|
|
{ label: "蓝", value: "#667eea" },
|
|
|
|
|
@ -847,6 +910,9 @@ const submitQuick = async () => {
|
|
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
loadHospitals();
|
|
|
|
|
// 先还原从详情 / 处理页返回时的筛选与分页状态,再清缓存避免后续直接进入页面仍套用旧值
|
|
|
|
|
restoreListState();
|
|
|
|
|
clearListState();
|
|
|
|
|
loadList();
|
|
|
|
|
document.addEventListener("click", onDocClick);
|
|
|
|
|
});
|
|
|
|
|
|