refactor(meetings): MeetingNew admin/manager 双前缀路由 (admin 不用 /manager 路径)
把 'admin 用 manager 前缀 URL' 这个跨角色硬编码改对称.
router:
- 新增 admin-meetings-new → manager/MeetingNew.vue (公共页)
MeetingNew.vue goBack():
- new 模式: admin 跳 /admin/projects, manager 跳 /manager/projects (用 projectsBase computed)
- edit/copy 模式: admin 跳 /admin/meetings, manager 跳 /manager/meetings (用 meetingsBase computed)
- roleSegment / isAdmin 从 route.path.split('/')[1] 计算, 不依赖 userStore
meetings/Meetings.vue onEdit/onCopy:
- 引入 newRouteName computed (isAdmin ? 'admin-meetings-new' : 'manager-meetings-new')
- router.push({ name: newRouteName.value, query: {...} })
效果:
- admin 点 '新建/修改/复制' → URL 是 /admin/meetings/new, 不再跨到 /manager/meetings/new
- admin 取消保存 → 回 /admin/meetings (列表) 或 /admin/projects (新建上游)
- manager 行为不变
This commit is contained in:
@@ -28,6 +28,7 @@ const routes = [
|
|||||||
{ path: 'projects', name: 'admin-projects', component: () => import('@/views/manager/Projects.vue'), meta: { title: '项目管理' } },
|
{ path: 'projects', name: 'admin-projects', component: () => import('@/views/manager/Projects.vue'), meta: { title: '项目管理' } },
|
||||||
{ path: 'meetings', name: 'admin-meetings', component: () => import('@/views/meetings/Meetings.vue'), meta: { title: '会议管理' } },
|
{ path: 'meetings', name: 'admin-meetings', component: () => import('@/views/meetings/Meetings.vue'), meta: { title: '会议管理' } },
|
||||||
{ path: 'meetings/detail/:meetingId', name: 'admin-meetings-detail', component: () => import('@/views/manager/MeetingDetail.vue'), meta: { title: '会议详情' } },
|
{ path: 'meetings/detail/:meetingId', name: 'admin-meetings-detail', component: () => import('@/views/manager/MeetingDetail.vue'), meta: { title: '会议详情' } },
|
||||||
|
{ path: 'meetings/new', name: 'admin-meetings-new', component: () => import('@/views/manager/MeetingNew.vue'), meta: { title: '新建会议' } },
|
||||||
{ path: 'department', name: 'admin-department', component: () => import('@/views/admin/Department.vue'), meta: { title: '科室管理' } },
|
{ path: 'department', name: 'admin-department', component: () => import('@/views/admin/Department.vue'), meta: { title: '科室管理' } },
|
||||||
{ path: 'title', name: 'admin-title', component: () => import('@/views/admin/Title.vue'), meta: { title: '职称管理' } },
|
{ path: 'title', name: 'admin-title', component: () => import('@/views/admin/Title.vue'), meta: { title: '职称管理' } },
|
||||||
{ path: 'experts', name: 'admin-experts', component: () => import('@/views/expert/Experts.vue'), meta: { title: '专家管理' } },
|
{ path: 'experts', name: 'admin-experts', component: () => import('@/views/expert/Experts.vue'), meta: { title: '专家管理' } },
|
||||||
|
|||||||
@@ -57,12 +57,20 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { ref, reactive, computed, onMounted } from 'vue'
|
import { ref, reactive, computed, onMounted } from 'vue'
|
||||||
import { useRoute, useRouter } from 'vue-router'
|
import { useRoute, useRouter } from 'vue-router'
|
||||||
|
import { useUserStore } from '@/store/modules/user'
|
||||||
import { bizAdd, bizGet, bizUpdate } from '@/api/public'
|
import { bizAdd, bizGet, bizUpdate } from '@/api/public'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
|
||||||
|
// ========== 角色感知 (admin/manager 共用此新建页, 按 URL 第 1 段识别) ==========
|
||||||
|
const userStore = useUserStore()
|
||||||
|
const roleSegment = computed(() => route.path.split('/')[1]) // 'admin' | 'manager'
|
||||||
|
const isAdmin = computed(() => roleSegment.value === 'admin')
|
||||||
|
const meetingsBase = computed(() => `/${roleSegment.value}/meetings`)
|
||||||
|
const projectsBase = computed(() => `/${roleSegment.value}/projects`)
|
||||||
|
|
||||||
// ========== mode 判定 ==========
|
// ========== mode 判定 ==========
|
||||||
// 3 种模式:
|
// 3 种模式:
|
||||||
// new: ?projectId=xxx → POST /business/meeting (新建)
|
// new: ?projectId=xxx → POST /business/meeting (新建)
|
||||||
@@ -183,13 +191,13 @@ async function onSave() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function goBack() {
|
function goBack() {
|
||||||
// 跳回上游列表页:
|
// 跳回上游列表页 (按角色):
|
||||||
// new (从 Projects 来) → /manager/projects
|
// new (从 Projects 来) → /{role}/projects
|
||||||
// edit/copy (从 Meetings 来) → /manager/meetings
|
// edit/copy (从 Meetings 来) → /{role}/meetings
|
||||||
if (mode.value === 'new') {
|
if (mode.value === 'new') {
|
||||||
router.push('/manager/projects')
|
router.push(projectsBase.value)
|
||||||
} else {
|
} else {
|
||||||
router.push({ name: 'manager-meetings' })
|
router.push(meetingsBase.value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -88,7 +88,7 @@
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 修改 / 复制: 都跳 manager-meetings-new (MeetingNew.vue 公共页, 不区分角色入口) -->
|
<!-- 修改 / 复制: 按角色跳 admin-meetings-new / manager-meetings-new (MeetingNew.vue 公共页) -->
|
||||||
<!-- 查看: 按角色跳 /admin/meetings/detail/:id 或 /manager/meetings/detail/:id -->
|
<!-- 查看: 按角色跳 /admin/meetings/detail/:id 或 /manager/meetings/detail/:id -->
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@@ -110,6 +110,8 @@ const breadcrumb = computed(() =>
|
|||||||
)
|
)
|
||||||
// 详情路由前缀: admin 跳 admin-meetings-detail, manager 跳 manager-meetings-detail
|
// 详情路由前缀: admin 跳 admin-meetings-detail, manager 跳 manager-meetings-detail
|
||||||
const detailBase = computed(() => `/${roleSegment.value}/meetings`)
|
const detailBase = computed(() => `/${roleSegment.value}/meetings`)
|
||||||
|
// 修改/复制路由名: 按角色选 admin-meetings-new 或 manager-meetings-new
|
||||||
|
const newRouteName = computed(() => isAdmin.value ? 'admin-meetings-new' : 'manager-meetings-new')
|
||||||
|
|
||||||
// ========== 筛选 (按实际 8 项: 项目编号/会议ID/会议名称/第?期/会议时间/项目形式/当前阶段/备注) ==========
|
// ========== 筛选 (按实际 8 项: 项目编号/会议ID/会议名称/第?期/会议时间/项目形式/当前阶段/备注) ==========
|
||||||
const q = ref({
|
const q = ref({
|
||||||
@@ -171,12 +173,12 @@ function reset() {
|
|||||||
function viewDetail(row) {
|
function viewDetail(row) {
|
||||||
router.push(`${detailBase.value}/detail/${row.meetingId}`)
|
router.push(`${detailBase.value}/detail/${row.meetingId}`)
|
||||||
}
|
}
|
||||||
// 修改 / 复制: 都跳 manager-meetings-new (MeetingNew.vue 是公共页, admin 进 manager 路由不影响功能)
|
// 修改 / 复制: 按角色选 admin-meetings-new 或 manager-meetings-new (MeetingNew.vue 公共页)
|
||||||
function onEdit(row) {
|
function onEdit(row) {
|
||||||
router.push({ name: 'manager-meetings-new', query: { meetingId: row.meetingId, projectId: row.projectId || '' } })
|
router.push({ name: newRouteName.value, query: { meetingId: row.meetingId, projectId: row.projectId || '' } })
|
||||||
}
|
}
|
||||||
function onCopy(row) {
|
function onCopy(row) {
|
||||||
router.push({ name: 'manager-meetings-new', query: { meetingId: row.meetingId, projectId: row.projectId || '', mode: 'copy' } })
|
router.push({ name: newRouteName.value, query: { meetingId: row.meetingId, projectId: row.projectId || '', mode: 'copy' } })
|
||||||
}
|
}
|
||||||
|
|
||||||
// ========== 提交 (单条) ==========
|
// ========== 提交 (单条) ==========
|
||||||
|
|||||||
Reference in New Issue
Block a user