Files
cn-rdms-web/src/views/product/setting/modules/setting-base-info-card.vue
hongawen 4122dfa50d feat(product): 新增产品管理模块与字典组件功能
- 新增产品管理相关路由和页面(dashboard、list、requirement、setting)
- 实现产品基础信息编辑弹窗组件(base-info-dialog.vue)
- 添加运行时字典功能(dict-select、dict-text、dict-tag组件)
- 集成字典管理store和API调用
- 规范ID类型定义为string避免精度丢失问题
- 完善国际化资源文件支持中英文对照
- 新增对象上下文业务域入口页导航实现说明
- 添加Vue DevTools浮动入口注释说明
- 统一权限控制支持全局和对象作用域区分
- 规范分页查询参数类型定义与使用方式
2026-04-23 09:05:55 +08:00

79 lines
2.5 KiB
Vue

<script setup lang="ts">
import { computed } from 'vue';
import { RDMS_OBJECT_DIRECTION_DICT_CODE } from '@/constants/dict';
import DictText from '@/components/custom/dict-text.vue';
import { getProductStatusLabel, getProductStatusTagType } from '../../shared/product-master-data';
import { isProductBaseInfoEditable } from '../shared';
defineOptions({ name: 'SettingBaseInfoCard' });
interface Props {
baseInfo: Api.Product.ProductSettingBaseInfo | null;
}
interface Emits {
(e: 'edit'): void;
}
const props = defineProps<Props>();
const emit = defineEmits<Emits>();
const editDisabled = computed(() => {
if (!props.baseInfo) {
return true;
}
return !isProductBaseInfoEditable(props.baseInfo.statusCode);
});
</script>
<template>
<ElCard class="card-wrapper">
<template #header>
<div class="flex items-center justify-between gap-12px">
<div>
<h3 class="text-16px text-[#0f172a] font-700">基础信息</h3>
</div>
<ElButton
v-auth="{ code: 'project:product:update', source: 'object' }"
type="primary"
plain
:disabled="editDisabled"
@click="emit('edit')"
>
编辑基础信息
</ElButton>
</div>
</template>
<ElDescriptions v-if="baseInfo" :column="2" border>
<ElDescriptionsItem label="产品编码">{{ baseInfo.code || '--' }}</ElDescriptionsItem>
<ElDescriptionsItem label="产品名称">{{ baseInfo.name || '--' }}</ElDescriptionsItem>
<ElDescriptionsItem label="产品方向">
<DictText :dict-code="RDMS_OBJECT_DIRECTION_DICT_CODE" :value="baseInfo.directionCode" />
</ElDescriptionsItem>
<ElDescriptionsItem label="产品经理">
{{ baseInfo.managerUserNickname || baseInfo.managerUserId || '--' }}
</ElDescriptionsItem>
<ElDescriptionsItem label="当前状态">
<ElTag :type="getProductStatusTagType(baseInfo.statusCode)">
{{ getProductStatusLabel(baseInfo.statusCode) }}
</ElTag>
</ElDescriptionsItem>
<ElDescriptionsItem label="最近状态原因">{{ baseInfo.lastStatusReason || '--' }}</ElDescriptionsItem>
<ElDescriptionsItem label="产品描述" :span="2">
<div class="setting-base-info-card__description">{{ baseInfo.description || '--' }}</div>
</ElDescriptionsItem>
</ElDescriptions>
<ElEmpty v-else description="未获取到基础信息" />
</ElCard>
</template>
<style scoped>
.setting-base-info-card__description {
white-space: pre-wrap;
line-height: 1.7;
}
</style>