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

@@ -10,7 +10,7 @@
>
<template v-if="flag && hotzoneRes">
<hotzone
ref="hotzone"
ref="hotzoneRef"
@change="changeHotzone"
:zonesInit="hotzoneRes.zoneInfo"
:image="hotzoneRes.img"
@@ -22,47 +22,50 @@
</template>
</el-dialog>
</template>
<script>
<script setup>
import { ref } from "vue";
import hotzone from "./components/Hotzone.vue";
export default {
components: {
hotzone,
},
data() {
return {
flag: false,
hotzoneRes: null,
};
},
methods: {
changeHotzone(info) {
if (this.hotzoneRes) {
this.hotzoneRes.zoneInfo = info;
}
this.$emit("changeZone", info);
},
clickClose() {
this.flag = false;
this.hotzoneRes = null;
this.$emit("closeFlag", false);
},
clickOK() {
this.clickClose();
},
open(val) {
this.hotzoneRes = val || null;
if (this.hotzoneRes && !this.hotzoneRes.zoneInfo) {
this.hotzoneRes.zoneInfo = [];
}
this.flag = true;
},
close() {
this.flag = false;
this.hotzoneRes = null;
},
},
};
const emit = defineEmits(["changeZone", "closeFlag"]);
const flag = ref(false);
const hotzoneRes = ref(null);
// hotzoneRef:模板 ref 与组件 import 同名,改名避免互相覆盖
const hotzoneRef = ref(null);
function changeHotzone(info) {
if (hotzoneRes.value) {
hotzoneRes.value.zoneInfo = info;
}
emit("changeZone", info);
}
function clickClose() {
flag.value = false;
hotzoneRes.value = null;
emit("closeFlag", false);
}
function clickOK() {
clickClose();
}
function open(val) {
hotzoneRes.value = val || null;
if (hotzoneRes.value && !hotzoneRes.value.zoneInfo) {
hotzoneRes.value.zoneInfo = [];
}
flag.value = true;
}
function close() {
flag.value = false;
hotzoneRes.value = null;
}
// decorate.vue 通过 hotzoneRef.value.open(val) 调用
defineExpose({ open, close });
</script>
<style scoped lang="scss">
:deep(.el-dialog) {