/** * 全站 Avue CRUD 新增/编辑/查看弹窗标题自动注入 * * 默认情况下 Avue 弹窗标题走 i18n,只显示「新增 / 编辑 / 查看」。 * 本 mixin 在组件创建时自动根据当前菜单中文标题拼出完整标题,例如: * 「新增空港机场主数据」/「编辑空港机场主数据」/「查看空港机场主数据」 * * 标题来源优先级: * 1. 页面自定义方法 getCrudPageTitle()(若存在) * 2. 当前路由中文菜单标题(this.$router.$avueRouter.generateTitle) * * 若页面已在 option 中手动配置了 addTitle / editTitle / viewTitle,则不覆盖。 */ export function setupCrudDialogTitle(app) { app.mixin({ created() { if (!this.option || typeof this.option !== 'object') return; if (!Array.isArray(this.option.column)) return; if (this.option._dialogTitleInjected) return; const getTitle = typeof this.getCrudPageTitle === 'function' ? this.getCrudPageTitle : () => { const router = this.$router; if (router && router.$avueRouter) { return router.$avueRouter.generateTitle(this.$route, { label: 'name' }); } return (this.$route && this.$route.meta && this.$route.meta.title) || ''; }; const title = getTitle(); if (!title) return; this.option.addTitle = this.option.addTitle || `新增${title}`; this.option.editTitle = this.option.editTitle || `编辑${title}`; this.option.viewTitle = this.option.viewTitle || `查看${title}`; this.option._dialogTitleInjected = true; }, }); }