refactor: 四端完成 Options API → script setup + vuex → pinia 迁移

- buyer(95) / seller(169) / im(53) / manager(280) 共 597 个组件全部从 Options API 转换为 <script setup>
- 四端 vuex 全部移除,状态管理统一迁移至 pinia 4(stores/ 目录)
- util.js 等基础设施去除 vm 首参依赖;全局属性($Message/$filters 等)在 script 内改为具名导入
- 被外部 ref 访问的公共组件均已补齐 defineExpose(清单见各端 MIGRATION-VUE3.md)
- 各端 eslint 启用 vue/component-api-style 防止新代码回退 Options API
- 四端 yarn build 全部通过;迁移约定与注意事项已更新至各端 MIGRATION-VUE3.md
This commit is contained in:
lifenlong
2026-10-13 07:06:59 +08:00
parent 870bacdd8c
commit 88fc1b0b2a
674 changed files with 71220 additions and 69943 deletions

View File

@@ -33,71 +33,77 @@
</div>
</template>
<script>
<script setup>
import { computed, ref, watch, onMounted } from "vue";
import { useRoute, useRouter } from "vue-router";
import util, { HOME_NAV_NAME, HOME_NAV_ITEM } from "@/libs/util.js";
import { setStore } from "@/libs/storage";
import { useAppStore } from "@/stores/app";
export default {
name: "shrinkableMenu",
computed: {
menuList() {
return this.$store.state.app.menuList;
},
navList() {
return this.$store.state.app.navList;
},
currNav() {
return this.$store.state.app.currNav;
},
},
watch: {
$route(val) {
this.syncRouteMenu(val);
},
},
methods: {
syncRouteMenu(route) {
if (!route?.name) {
return;
}
if (route.name === "home_index") {
this.activateHomeNav();
return;
}
const firstRouterName =
route.meta?.firstRouterName || util.getFirstRouterName(route.name);
if (firstRouterName && firstRouterName !== this.currNav) {
this.selectNav(firstRouterName);
}
},
activateHomeNav() {
this.$store.commit("setCurrNav", HOME_NAV_NAME);
this.$store.commit("setCurrNavTitle", HOME_NAV_ITEM.title);
this.setStore("currNav", HOME_NAV_NAME);
this.$store.commit("updateMenulist", []);
},
changeMenu(name) {
if (!name) return;
this.$router.push({ name });
},
selectNav(name) {
this.$store.commit("childrenMenu", this.$refs.childrenMenu);
this.$store.commit("setCurrNav", name);
this.setStore("currNav", name);
if (name === HOME_NAV_NAME) {
this.$store.commit("updateMenulist", []);
this.$store.commit("setCurrNavTitle", HOME_NAV_ITEM.title);
if (this.$route.name !== "home_index") {
this.$router.push({ name: "home_index" });
}
return;
}
util.initRouter(this);
},
},
mounted() {
this.syncRouteMenu(this.$route);
},
};
defineOptions({ name: "shrinkableMenu" });
const appStore = useAppStore();
const route = useRoute();
const router = useRouter();
const childrenMenu = ref(null);
const menuList = computed(() => appStore.menuList);
const navList = computed(() => appStore.navList);
const currNav = computed(() => appStore.currNav);
watch(
() => route.name,
() => {
syncRouteMenu(route);
}
);
function syncRouteMenu(route) {
if (!route?.name) {
return;
}
if (route.name === "home_index") {
activateHomeNav();
return;
}
const firstRouterName =
route.meta?.firstRouterName || util.getFirstRouterName(route.name);
if (firstRouterName && firstRouterName !== currNav.value) {
selectNav(firstRouterName);
}
}
function activateHomeNav() {
appStore.setCurrNav(HOME_NAV_NAME);
appStore.setCurrNavTitle(HOME_NAV_ITEM.title);
setStore("currNav", HOME_NAV_NAME);
appStore.updateMenulist([]);
}
function changeMenu(name) {
if (!name) return;
router.push({ name });
}
function selectNav(name) {
appStore.childrenMenu(childrenMenu.value);
appStore.setCurrNav(name);
setStore("currNav", name);
if (name === HOME_NAV_NAME) {
appStore.updateMenulist([]);
appStore.setCurrNavTitle(HOME_NAV_ITEM.title);
if (route.name !== "home_index") {
router.push({ name: "home_index" });
}
return;
}
util.initRouter();
}
onMounted(() => {
syncRouteMenu(route);
});
</script>
<style lang="scss" scoped>