Files
GERP/src/views/company/Tenant.vue
T

74 lines
2.3 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<script setup lang="ts">
/**
* 租户管理
*
* 迁移自 TempLate/GERP/pages/Company/tenant.html
* 原生实现:CompanyTablePage 基类 + tableName='Tenant' + pkField='TenantUUID'
* + adminBadge:true(特权模式徽章)+ defaultColumns fallback + onView 跳详情
*
* 原生 defaultColumns(仅作 fallback 参考,Vue 版走后端 Columns 接口):
* TenantUUID(主键,隐藏表单) / TenantName(文本) / TenantStatus(0禁用/1启用)
* / ReviewStatus(0待审核/1已通过/2已拒绝) / TenantExpireTime(日期时间)
* / ReviewRemark(文本) / CreateTime(创建时间,只读)
*
* Vue 版(阶段 1 简化):
* - server / admin_verify 由 request.ts 拦截器统一注入,页面不拼接 buildApiUrl
* - 列定义优先走后端 /API/FormAPI/Columns/Tenant(CrudTable 自动处理)
* 非主实例的 getDefaultColumns fallback 暂不实现(TODO)
* - AdminBadge 自动根据 server/admin_verify 显示特权横幅(对齐原生 adminBadge:true)
* - role_scope 细粒度判断暂用 userStore.isAdmin 二分(TODO 待 checkAdmin 接入)
* - onView 跳 Vue 路由 /company/tenant-detail?TenantUUID=xxx(替代 GERP.Navigate)
* - 页面标题随 server 变化由 setPageTitle 统一处理
*/
import { useRouter } from 'vue-router'
import CrudTable from '@/components/CrudTable.vue'
import AdminBadge from '@/components/AdminBadge.vue'
import { setPageTitle } from '@/utils/serverScope'
setPageTitle('租户管理')
const router = useRouter()
// 租户记录类型(仅声明本页用到的字段)
interface TenantRow {
TenantUUID?: string
TenantName?: string
[k: string]: unknown
}
// 跳转租户详情页
function handleView(row: TenantRow): void {
router.push({
path: '/company/tenant-detail',
query: { TenantUUID: row.TenantUUID || '' },
})
}
</script>
<template>
<div class="tenant-page">
<!-- 管理员特权横幅(仅特权模式显示) -->
<AdminBadge />
<CrudTable
table="Tenant"
title="租户管理"
pk-field="TenantUUID"
searchable
pageable
stretch
selectable
:on-view="handleView"
/>
</div>
</template>
<style scoped lang="scss">
.tenant-page {
padding: 20px;
height: 100%;
display: flex;
flex-direction: column;
box-sizing: border-box;
}
</style>